mongooseerror handling

我试图做一些validation用户input使用Express和Mongoose。 以前,我在用户模型的“密码”字段上直接设置了“最小长度”validation程序。 它将检查input的密码string是否足够长,如果不是,则会将其传递给尝试保存用户时创build的ValidationError对象。 这将被发回给用户,并显示在适当的表单域。

但是现在我已经实现了哈希,盐和encryption,这不能正常工作。 散列版本的密码远远长于原始密码。 所以我想我可以做这样的事情:

exports.createNewUser = function(req, res, next){ var user = new User({ email : req.body.email , name : req.body.name }) , minLength = Validator.minLength(req.body.password); if (!minLength) return next(new Error('Password aint right length')); user.setPassword(req.body.password); user.save(function(err){ if (!err) return res.redirect('/'); else { console.log('error saving usr', err); err['body'] = req.body; return res.render('user/register', err); } }); }; 

问题是这样的

 return next(new Error('err message')); 

只是显示在控制台上。 我需要一些方法将它附加到mongoosevalidation错误对象。 有任何想法吗?

看了一下后,我find了一个解决scheme。 基本上,您可以在试图保存模型之前调用模型的“validation”function。 然后,您可以将其他validation应用于不一定在您的模型中设置的其他属性。 在这种情况下,我正在testing非哈希密码string的长度,看它是否足够长。 如果不是,则向返回的err对象添加一个对象。 然后这可以发回到表单。

 user.validate(function(err){ if (req.body.password.length < 20) { err.errors.password = { type : 'the pw should be longer'}; } console.log(err); });