将自定义错误添加到req.validationErrors()?

时间:2016-06-29 15:18:12

标签: node.js express

我使用快速验证来验证我的数据输入。这很棒,但是使用验证检查一些数据是不切实际的(例如,如果检查facebook令牌是否有效)

有没有办法通过我无法想到的验证来完成此操作,或者至少可以通过传递对象等手动添加错误?

auth = (req, res, next) => {
    //some setup:
    res.locals.errors = [];
    passport.authenticate('facebook-token', (err, user, info) => {
        //this is where I would like to either validate with a custom validation or add this manually to whereever validationErrors get's it's values.
        if(err && err.message === "Failed to fetch user profile"){
            res.locals.errors.push({
                param: 'access_token',
                msg: 'Invalid access token',
                value: req.query.access_token
            });
        }

    })(req, res, next);
},

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我想以某种方式为express-validator生成的数组添加错误,以便在您调用req.validationErrors()时显示它们。

我想要的验证不仅仅是对特定参数或标题的快速类型检查 - 我想一次检查多个字段并将任何失败的错误推送到标准的validationErrors数组中。

我通过添加' customValidator'来实现这一目标。使用express-validator。我的自定义验证器 将始终返回false

我注入了这样的自定义验证器:

app.use(expressValidator({
 customValidators: {
    myCustomFunc: function(value) {
       return false;
    }
 }
}));

现在我只调用这个自定义验证器,如果我的自定义逻辑失败 - 这会在validationErrors数组中设置错误。由于express-validator要求你传递一个有效的param / header我决定创建我自己的虚拟的,然后在该字段上调用自定义验证器,知道它将返回false。我基本上把它用作旗帜:

// code to check for custom logic - needs reqeust object
// in this simple example I check whether field2 is set if
// we have field1
function isValidRequest(req, cb){

  if(req.headers.myField1 && !req.headers.myField2){
    // create dummy header field
    req.headers.myDummyHeader = false;
    // now call customValidator, pass it our new dummy header  
    req.checkHeaders("myDummyHeader", 
   "Invalid request, myField1 and myField2 should both be set").myCustomFunc();
  }

cb()
}

...

// (later) get the express validation errors 
// you'll see that our custom error message is included
var errors = req.validationErrors();
console.log(errors);