天天看點

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