我有一个节点/快速项目,对于任何 POST 请求,我想验证请求正文中的字段。
为此,我想设置一个处理 POST 方法的路由配置,配置将有一个带有约束的字段列表,如下所示:
router.post('/some_path', function(request, response, next){
this.fieldsToValidate = [
{
name: 'field_name',
required: true,
...
},
...
]
// handle route after validation
}
我希望这是一个按路由配置,这样我就可以定义一组字段及其约束,并且它们将由中间件自动验证。
所以中间件看起来像:
function(request, response, next){
if (request.method === 'POST'){
this.fieldsToValidate.forEach(function(field){
//do some validation
});
}
next();
}
我了解中间件是在请求之前运行的,但有没有办法像这样使用每个路由配置并使用中间件验证它?
提前致谢。
答案 0 :(得分:1)
这个怎么样:
使用express-validator(check in detail)和路由正则表达式检查你的参数,假设你的api都在 / api / *中:
服务器:
var expressValidator = require('express-validator');
app.use(bodyParser.json());
app.use(expressValidator());
app.use('/api',function(req,res,next){
switch(req.baseUrl)
{
case ://API 1
req.checkHeaders('user','valid header').notEmpty();
break;
case ://API 2
//Others
}
var errors = req.validationErrors();
if (errors) {
res.send('There have been validation errors: ' + util.inspect(errors), 400);
return;
}
next();
});
答案 1 :(得分:0)
express-validator node-validator的express.js中间件。我正在使用我的项目工作得很好。您可以进行验证和清理。
// VALIDATION
// checkBody only checks req.body; none of the other req parameters
// Similarly checkParams only checks in req.params (URL params) and
// checkQuery only checks req.query (GET params).
req.checkBody('postparam', 'Invalid postparam').notEmpty().isInt();
req.checkParams('urlparam', 'Invalid urlparam').isAlpha();
req.checkQuery('getparam', 'Invalid getparam').isInt();
// OR assert can be used to check on all 3 types of params.
// req.assert('postparam', 'Invalid postparam').notEmpty().isInt();
// req.assert('urlparam', 'Invalid urlparam').isAlpha();
// req.assert('getparam', 'Invalid getparam').isInt();
// SANITIZATION
// as with validation these will only validate the corresponding
// request object
req.sanitizeBody('postparam').toBoolean();
req.sanitizeParams('urlparam').toBoolean();
req.sanitizeQuery('getparam').toBoolean();