【问题标题】:Mongoose error handling猫鼬错误处理
【发布时间】:2012-07-30 19:13:54
【问题描述】:

我正在尝试使用 Express 和 Mongoose 对用户输入进行一些验证。以前,我直接在用户模型的“密码”字段上设置了一个“最小长度”验证器。它会检查输入的密码字符串是否足够长,如果不是,它将被传递给尝试保存用户时创建的 ValidationError 对象。这将被发送回给用户,并显示在相应的表单字段中。

但现在我已经实现了散列、盐和加密,这并不能正常工作。密码的哈希版本比原始密码长得多。所以我想我可以这样做:

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')); 

简单地显示在控制台上。我需要某种方式将它附加到 mongoose Validation Errors 对象。有什么想法吗?

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

    看了一圈后,我找到了解决办法。基本上,您可以在尝试保存模型之前调用模型上的“验证”功能。然后,您可以对模型中不一定设置的其他属性应用额外的验证。在这种情况下,我正在测试非散列密码字符串的长度,看看它是否足够长。如果不是,我将一个对象添加到返回的 err 对象中。然后可以将其发送回表单。

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

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2018-11-24
      • 1970-01-01
      • 2014-09-25
      • 2014-10-17
      • 2019-05-21
      • 2018-09-13
      • 1970-01-01
      • 2012-12-03
      相关资源
      最近更新 更多