视频中两处可能出现的错误
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':'密码不正确'}) } }) } }) })