我正在尝试在我的站点中哈希admin的密码。我进行搜索后发现,此错误是由于被null
或undefined
用作我们希望对其进行哈希处理的值而引起的。
这是我的代码,每当我console.log(admin)返回{}
时,我都不知道为什么。
adminSchema.pre('save', (next) => {
var admin = this;
console.log(admin)
bcrypt.hash(admin.password, 10, (err, hash) => {
if (err) return next(err);
admin.password = hash;
next();
});
});
var adminModel = mongoose.model('Admin', adminSchema);
module.exports = adminModel;
服务器端代码:
var adminModel = require('./../models/admins');
router.post('/register', (req, res) => {
var newAdmin = {
adminName: req.body.adminName,
faculty: req.body.faculty,
email: req.body.email,
password: req.body.password
}
adminModel.create(newAdmin, (err, admin) => {
if (err) {
console.log('[Admin Registration]: ' + err);
}
else {
console.log('[Admin Registration]: Done');
req.session.adminId = admin._id;
res.redirect('/admin/submitScore')
}
})
});
不幸的是,我找不到console.log(admin)为空的原因。如果有人可以帮助我,我将非常感激。
答案 0 :(得分:1)
在箭头功能中使用关键字this
会更改范围。 See more here。在您的快速路由中这不是问题,但是在猫鼬中间件中却是问题。更改功能以不使用this
或制作老式的function(){}