#7-2 BodyParser & PostMan & 회원 가입 기능

HeeDong-log·2023년 9월 6일
app.post("/register", (req, res) => {
	//회원 가입 할 때 필요한 정보들을 client에서 가져오면
	//그 정보들을 데이터베이스에 넣어준다.
	const user = new User(req.body);

   user.save((err, userInfo) => {
     // user.save()는 mongodb의 메소드.
     // req.body가 유저 모델에 저장이 된다.
     // userInfo = req.body
     if (err) return res.json({ success: false, err });
     return res.status(200).json({
       success: true,
     });
   });
 });

위와 같이 코드를 짜고 postman으로 요청을 보냈더니 다음과 같은 에러메시지가 떴다.

MongooseError: Model.prototype.save() no longer accepts a callback

그래서 검색해봤더니

Mongoose 5.0.0 버전 이후부터 Model.prototype.save() 메서드가 콜백을 더 이상 지원하지 않는다. 따라서 해당 메서드를 사용할 때 콜백 대신에 async/await 또는 Promise를 사용해야 한다. 콜백을 사용하면 MongooseError: Model.prototype.save() no longer accepts a callback 에러가 발생한다.

라고 되어있었다.

그래서 코드를 다음과 같이 다시 작성했다.

app.post("/register", (req, res) => {
  const user = new User(req.body);
  user
    .save()
    .then((userInfo) => {
      return res.json({ success: true });
    })
    .catch((err) => {
      return res.json({ success: false, err });
    });
});

위와 같이 promise로 작성했더니 postman으로 요청을 시도했을 때 아래와 같은 메시지가 떴다.

그런데 몇 분 뒤 다시 postman으로 요청을 보내봤더니 아래와 같은 에러메시지가 떴다.

확인을 해보았더니 mongodb E11000 에러는 키값이 중복될 때 발생하는 에러이다.
이미 가입되어 있는 email정보로 다시 가입 요청을 보내서 생긴 에러였다.
email정보만 수정해서 다시 postman으로 요청을 보냈더니 정상 작동하였다.

profile
포기하지 않는 코딩 생활-!

0개의 댓글