視頻中兩處可能出現(xiàn)的錯(cuò)誤
1、這里倒數(shù)第一個(gè)next()應(yīng)該去掉,否則加鹽會(huì)失敗。因?yàn)閎crypt.hash()的回調(diào)函數(shù)是一個(gè)異步操作,所以加鹽和這個(gè)next()會(huì)同時(shí)執(zhí)行,所以還沒加鹽完成就已經(jīng)觸發(fā)next()進(jìn)行下一步了;
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();//這個(gè)next()要去掉,否則加鹽會(huì)失敗 });
2、sinin路由里,User.find({})應(yīng)該改為User.findOne({}),否則返回永遠(yuǎn)為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':'密碼不正確'}) } }) } }) })