-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
post login model.findone() no longer accepts a callback
24.01.05 14:30 작성 조회수 110
3
callback문법이 적용이 안되서 바꿔 성공했는데 좋은 코드인지는 모르겠습니다 참고 하실분은 참고해주세요
app.post("/api/users/login", async (req, res) => {
try {
// 같은 이메일의 유저가 있는지 확인
const user = await User.findOne({ email: req.body.email });
if (!user) {
return res.json({
loginSuccess: false,
message: "제공된 이메일에 해당하는 유저가 없습니다.",
});
}
// 비밀번호 확인
const isMatch = await user.comparePassword(req.body.password);
if (!isMatch) {
return res.json({
loginSuccess: false,
message: "비밀번호가 틀렸습니다.",
});
}
// 토큰 쿠키에 저장
const userdata = await user.generateToken();
// 토큰을 저장한다. 어디에? 쿠키, 로컬스토리지
res
.cookie("x_auth", userdata.token)
.status(200)
.json({ loginSuccess: true, userId: userdata._id });
} catch (err) {
return res.status(400).send(err);
}
});
userSchema.methods.comparePassword = function (plainPassword) {
// plainpassword와 db에 암호화된 비밀번호가 같은지 확인
const result = bcrypt.compare(plainPassword, this.password);
return result;
};
userSchema.methods.generateToken = async function (cb) {
var user = this;
// jsonwebtoken을 이용해서 token을 생성하기
var token = jwt.sign(user._id.toHexString(), "secretToken");
// user._id(db의 _id) + secreToken = token
// token으로 user를 판별할 수 있다.
// user.token = token;
user.token = token;
try {
const savedUser = await user.save();
return user;
} catch (err) {
return err;
}
};
답변을 작성해보세요.
0
인프런 AI 인턴
2024.01.05
안녕하세요, 인프런 AI 인턴입니다.
조창욱 님께서 공유하신 코드는 Mongoose 버전 5.0 이상에서 findOne
메소드 사용 시 콜백 함수 대신 프로미스나 async/await 문법을 사용하여 문제를 해결한 좋은 예시입니다. 이와 유사한 질문에 대한 답변이 이미 제공되었으니 참고하시면 도움이 될 것 같습니다.
질문 제목: “model.findone() no longer accepts a callback 오류”
질문 링크로 이동하기
감사합니다.
답변 1