개인과제(게시판,댓글CRUD구현)

[내일배움캠프] 개인 과제 게시판/댓글 CRUD기능 구현하기-C/R-

김민커 2023. 6. 16. 18:02
router.post("/posts", async (req, res) => {
  //body에서 데이터 받음//
  const { title, content, user, password } = req.body;
  //작성 시간 설정//
  const day = new Date();
  //중복 아이디 확인 있다면 else로 없다면 if 구문//
  const existsUser = await Post.find({ user });
  if (existsUser.length === 0) {
    //데이터를 작성했는지 확인//
    if (title) {
      //데이터를 작성했는지 확인//
      if (content) {
        //데이터를 작성했는지 확인//
        if (user) {
          //데이터를 작성했는지 확인//
          if (password) {
            await Post.create({ title, content, user, password, day });
            res.json({ message: "게시판을 생성하였습니다." })
          } else { return res.status(400).json({ message: "데이터형식을 확인해주세요" }) }
        } else { return res.status(400).json({ message: "데이터형식을 확인해주세요" }) }
      } else { return res.status(400).json({ message: "데이터형식을 확인해주세요" }) }
    } else { return res.status(400).json({ message: "데이터형식을 확인해주세요" }) }
  } else { return res.status(400).json({ message: "이미 존재하는 user입니다." }) }
}
);

routes/posts.js의 게시판 생성 코드다.

req.body로 필요한 input정보를 받는다.

게시판을 생성하는 과정에서 생기는 오류와 버그 마다 하드코딩을 했다.

좀 더 코드에 익숙해지면 간략화 해야할 부분은 if문인 것 같다.

각각의 조건은 user가 존재하는 id인지, 

req.body로 받는 데이터가 제대로 작성이 되어 있는지의 부분이다.

 

 

 

//db의 게시글 전체 목록 불러오기//
router.get("/posts", async (req, res) => {
  const posts = await Post.find({})
  //db의 게시글 데이터 중 표출 데이터 선정//
  const postList = posts.map((post) => {
    //db의 오브젝트 아이디를 문자열로 변환//
    postId = String(post._id)
    return {
      "postId": postId,
      "title": post.title,
      "user": post.user,
      "day": post.day,
    }
  })
  res.send({ postList });
});

routes/posts.js의 게시글 목록 조회 코드다.

게시글 전체를 조회하기 위한 코드이기 때문에 const posts = await Post.find({})에 조건이 없다.

기본적으로 mongodb에 저장된 데이터는 각각의 고유한 id가 부여된다. 그 아이디를 통해서 각각의 게시글을 특정해야하기 때문에  postId = String(post._id) 따로 id를 위한 키를 만들었고 문자열화 했다.

 

router.get("/posts/:id", async (req, res) => {
  //id의 파라미터 설정//
  id = req.params.id;
  //id가 같은 데이터를 서치//
  const [existsPost] = await Post.find({ _id: Object(id) });
  //id와 같은 데이터가 없다면 else로 있다면 if구문//
  if ([existsPost].length) {
    const searchReslut = [existsPost].map((search) => {
      return {
        "postId": id,
        "title": search.title,
        "content": search.content,
        "user": search.user,
        "day": search.day
      }
    })
    res.json({ searchReslut });
  } else { return res.status(400).json({ message: "데이터형식을 확인해주세요" }) }

});

routes/posts.js의 특정 게시글 목록 조회 코드다.

api의 주소가 /:id로 되어 있다. 

id = req.params.id; 이것을 통해서 /:id주소에 할당되어 있는 id파라미터를 가져온다.

const [existsPost] = await Post.find({ _id: Object(id) }); api의 주소화 저장된 오브젝트 id가 같은게 있는지 찾는다.

만약에 있다면 그것에 해당하는 데이터를 reurn한다.