인프런 커뮤니티 질문&답변
backend강의를 다보고 나서 질문드립니다.
작성
·
142
0
강의는 잘 봤는데요.
궁금한게 있어서 질문드릴게용
userSchema.methods.generateToken = function (cb) {
let user = this;
// jsonwebtoken을 이용해서 token을 생성하기
let token = jwt.sign(user._id.toHexString(), "secretToken");
여기서 갑자기 user._id가 나왓는데 user._id는 userSchema에 없는데
user._id에 대해서 설명해 줄 수 있나요?
/*
user._id + 'secretToken' = token
=> 'secretToken' => user._id
*/
user.token = token;
user.save(function (err, user) {
if (err) return cb(err);
cb(null, user);
});
};
//그리고 여기서는 statics를 쓰셧는데
// methods를 쓰다가 갑자기 static를 쓰신 이유도 궁금합니다.
// 알긴 알겠는데 선생님의 의견이 궁금해서요
userSchema.statics.findByToken = function (token, cb) {
let user = this;
// 토큰을 decode 한다.
jwt.verify(token, "secretToken", function (err, decoded) {
// 유저 아이디를 이용해서 유저를 찾은 다음에
// 클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인
user.findOne({ _id: decoded, token: token }, function (err, user) {
if (err) return cb(err);
cb(null, user);
});
});
};
답변 1
1
John Ahn
지식공유자
user._id 는 _id 이 아이디는 스키마에 정의해주지 않아도 자동생성되기 때문에 user._id로 사용이 가능합니다 ~ !
그리고 몽고 db 에서 method와 static의 차이는 많이 헤깔리는 부분인데
개인적으로 여기에서 해주는 설명이 가장 이해가 잘되는것 같습니다 ~ !
https://stackoverflow.com/questions/29664499/mongoose-static-methods-vs-instance-methods
수고하세요 ^^





