我使用快速验证来验证我的数据输入。这很棒,但是使用验证检查一些数据是不切实际的(例如,如果检查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);
},
答案 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);