视频中两处可能出现的错误
1、这里倒数第一个next()应该去掉,否则加盐会失败。因为bcrypt.hash()的回调函数是一个异步操作,所以加盐和这个next()会同时执行,所以还没加盐完成就已经触发next()进行下一步了;
UserSchema.pre('save', function(next) {
var user = this;
if (this.isNew) {
this.meta.createAt = this.meta.updateAt = Date.now();
} else {
this.meta.updateAt = Date.now();
};
bcrypt.hash(user.password, 10, function(err, hash) {
if (err) return next(err);
user.password = hash;
next();
})
next();//这个next()要去掉,否则加盐会失败
});2、sinin路由里,User.find({})应该改为User.findOne({}),否则返回永远为null(可能是mongo版本原因)。
// signin
app.post('/user/signin', function(req, res) {
var _user = req.body.user;
var name = _user.name;
var password = _user.password;
User.findOne({name: name}, function(err, result) {
if (err) { console.log(err); };
if (result==null) {
res.json({'message':'该用户不存在'});
} else {
result.comparePassword(password, function(err, isMatch) {
if (err) { console.log(err); };
if (isMatch) {
res.redirect('/');
} else {
res.json({'message':'密码不正确'})
}
})
}
})
})