작성
·
4K
0
MongooseError: Model.prototype.save() no longer accepts a callback
이 오류가 떠서 확인해보니 Mongoose6부터 callback 문법이 사용되지 않는다고 합니다
버전을 바꾸는 것은 시도 하지 않았고
.then
.catch
or async
await
로 바꾸고 싶은데
수 시간 시도해보다가 안되서 글 남깁니다.
callback 구문을 보고 .then
.catch
or async
await
이 방식으로 바꾸는 법을 알고 싶습니다.
이 부분에서만 에러가 발생하는지는 모르겠으나
stack Overflow에 적어봤는데 역시 답을 얻을 수 없더라구요
app.post("/login", (req, res) => {
User.findOne({ email: req.body.email }, (err, user) => {
if (!user) {
return res.json({
loginSuccess: false,
message: "제공된 이메일에 해당하는 유저가 없습니다.",
});
}
user.comparePassword(req.body.password, (err, isMatch) => {
if (!isMatch) return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다." });
user.generateToken((err, user) => {
if (err) return res.status(400).send(err);
res.cookie("x-auth", user.token).status(200).json({ loginSuccess: true, userId: user._id });
});
});
});
});
답변 2
8
저도 강의듣다가 이것때문에 엄청 찾아보고 있었는데
mongoose 더 이상 콜백을 허용하지 않는다고 하네요~
스택오버플로에서 답을 찾은것 같아요
아래 코드가 도움이 되실지 모르겠네요(혹시 몰라 참고글 링크도 적어둡니다)
app.post('/register', async (req, res) => {
//회원가입시 필요 정보를 client에서 가져오면
//데이터베이스에 삽입한다
//body parser를 통해 body에 담긴 정보를 가져온다
const user = new User(req.body)
//mongoDB 메서드, user모델에 저장
const result = await user.save().then(()=>{
res.status(200).json({
success: true
})
}).catch((err)=>{
res.json({ success: false, err })
})
})
6
위에 염원식 님 소스처럼 수정해서 사용하셔도 좋지만... 중간 중간 같은 문제가 계속 발생해서 소스를 계속 바꿔가면서 수업을 받으려니 많이 힘들더라구요~
나중엔 안되겠어서
package.json의 mongoose버전을 아래로 바꾸고
"mongoose": "^5.4.20"
다시 npm install해서 수업 이어 나가고 있습니다.
와,, 감사합니다 !!