• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

강의에 나오는 문법이 적용되지 않습니다

23.03.06 11:03 작성 조회수 3.18k

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

·

답변을 작성해보세요.

7

염원식님의 프로필

염원식

2023.03.10

저도 강의듣다가 이것때문에 엄청 찾아보고 있었는데
mongoose 더 이상 콜백을 허용하지 않는다고 하네요~

스택오버플로에서 답을 찾은것 같아요
아래 코드가 도움이 되실지 모르겠네요(혹시 몰라 참고글 링크도 적어둡니다)


https://stackoverflow.com/questions/75586474/mongoose-stopped-accepting-callbacks-for-some-of-its-functions

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 })
  })
})
심기은님의 프로필

심기은

2023.03.13

와,, 감사합니다 !!

JI EUN PARK님의 프로필

JI EUN PARK

2023.07.17

너무 감사합니다. 헤매고 있었는데 ㅜㅜ

6

beam.ch6님의 프로필

beam.ch6

2023.03.27

위에 염원식 님 소스처럼 수정해서 사용하셔도 좋지만... 중간 중간 같은 문제가 계속 발생해서 소스를 계속 바꿔가면서 수업을 받으려니 많이 힘들더라구요~

나중엔 안되겠어서
package.json의 mongoose버전을 아래로 바꾸고
"mongoose": "^5.4.20"

다시 npm install해서 수업 이어 나가고 있습니다.