天天看点

Express validate 中间件

在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上面。