inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

model.findone() no longer accepts a callback 오류

4405

재원

작성한 질문수 2

14

findOne()도 save()와 마찬가지로 몽구스 5.0부터는 콜백함수를 지원하지 않기 때문에 기존에

app.post('/api/users/login',(req, res) =>{
    // 요청된 이메일을 데이터베이스 찾기
    User.findOne({email: req.body.email}, (err, docs) =>{ 
        if(!docs){
            return res.json({
                loginSuccess: false,
                messsage: "제공된 이메일에 해당하는 유저가 없습니다."
            })
        }
    // 요청된 이메일이 DB에 있다면 Password가 일치한지 확인
        user.comparePassword(req.body.password, (err, isMatch) => {
            if(!isMatch)
                return res.json({loginSuccess: false, messsage: "비밀번호가 틀렸습니다."})
    // Password가 일치하다면 토큰 생성
            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})

            })
        })
    })
})

에서 콜백함수가 들어가 있기 때문에 callback을 쓰지 않고 promise 또는 async/await로 수정해서 사용하시면 됩니다.

저같은 경우는 promise로 수정해서 .then .catch로 수정을 했습니다.

app.post('/api/users/login',(req, res) =>{
    // 요청된 이메일을 데이터베이스 찾기
    User.findOne({email: req.body.email})
    .then(docs=>{
        if(!docs){
            return res.json({
                loginSuccess: false,
                messsage: "제공된 이메일에 해당하는 유저가 없습니다."
            })
        }
        docs.comparePassword(req.body.password, (err, isMatch) => {
            if(!isMatch) return res.json({loginSuccess: false, messsage: "비밀번호가 틀렸습니다."})
    // Password가 일치하다면 토큰 생성
            docs.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})
            })
        })
    })
    .catch((err)=>{
        return res.status(400).send(err);
    })
})

참고하시고 수정하시면 될 것 같습니다.

react node.js

답변 1

0

John Ahn

감사합니다.

깃 이메일이랑 비번이 필요하다고 하네요

0

36

1

404 에러

0

103

1

34강 인증 체크에서 element 사용 때문에 에러나시는 분들 이렇게 하심 됩니다.

0

121

1

로그인, 로그아웃, 토근 작동 안 함

0

240

0

로그아웃 findOneAndUpdate 함수

0

171

1

9강 오류 어떻게 해결하나요?

0

195

1

localhost 에서 연결을 거부했습니다.

0

1931

4

포스트맨에서 true가 안떠요

0

151

1

왜 안되나요

0

130

1

몽고db 연결 오류가 납니다 위에껀 입력한 코드, 아래껀 터미널이에요

0

243

1

로그아웃 401 에러(Unauthorized)

0

506

2

암호가 해싱되지 않고 입력값 그대로 db에 저장되는 문제

0

151

1

7강중에서

0

167

2

User.findByToken is not a function

0

212

1

루트 디렉토리

0

272

1

useState

0

563

1

프록시 잘 설정했는데도 404 오류 뜨는 분들

5

876

6

webpack 관련 에러 질문

0

221

1

리액트 관련 질문

0

274

1

14강 로그아웃 안됨

0

319

1

mongoDB 데이터 확인하는 법

0

411

1

postman 에러

0

293

1

선생님 리덕스를 사용하면 어떠한 부분이 좋은지 알 수 있을까요?

0

235

1

다음과 같은 에러들이 발생합니다.

0

274

1