인프런 커뮤니티 질문&답변

exwhite님의 프로필 이미지
exwhite

작성한 질문수

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

노드 리액트 기초 강의 #12 토큰 생성 with jsonwebtoken

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

작성

·

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 더 이상 콜백을 허용하지 않는다고 하네요~

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


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 })
  })
})

와,, 감사합니다 !!

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

6

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

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

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

exwhite님의 프로필 이미지
exwhite

작성한 질문수

질문하기