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으로 요청을 보냈더니 정상 작동하였다.