在web程序中经常要验证用户提交的数据,不但前端要验证,后台业务同样要验证,否则会出大问题的。(ps:一些懒惰的后端总是不验证提交的数据就写到数据库了,将来是要掉坑的)
github已经有不少validate的中间件了,例如:express-validator(https://github.com/ctavan/express-validator) ,但是我觉得express-validator用起来不舒服,它的写法不够优美:
app.use(expressValidator([options]));
app.post('/:urlparam', function(req, res) {
req.checkBody('postparam', 'Invalid postparam').notEmpty().isInt();
req.checkParams('urlparam', 'Invalid urlparam').isAlpha();
req.checkQuery('getparam', 'Invalid getparam').isInt();
......
}
如果要验证十来个字段,看起来就不漂亮。而且我往往会忘掉这种语法,所以我自己写了一个简单的validate中间件,核心部分的代码如下:
var Validator = require('schema-validator');
function validateMiddleware(rules){
return validate;
function validate(req, res, next){
var formData = req.getData();
var validator = new Validator(rules);
var result = validator.check(formData);
if(!result._error){
next();
}else{
res.send(result);
}
}
}
module.exports = validateMiddleware;
调用的代码就十分优美了:
router.post('/password',
validate({
oldPassword: {
required: true
},
newPassword: {
required: true
}
}),
function(){
...
}
);
过一段时间闲下来了再完善这个中间件,然后放到github上面。