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