Koa Validation
This Library helps you validate all incoming request to your koa app in a meaningful and brief manner. Koa Validation not only provides you 40+ built in validation rules out of the box, but it also allows for custom rules to validate both incoming data and form requests. The library also provides for ways to filter incoming data before or after validating it. While validating forms you can easily perform actions after the file validation has completed. Koa Validation uses generator functions for validating inputs and hence easily allows for async handling.
Example Usage
Field Validations
var app = require('koa')();
var router = (new require('koa-router'))();
var koaBody = require('koa-better-body');
require('koa-qs')(app, 'extended');
var validate = require('koa-validation');
app.use(koaBody({
'multipart': true
}));
app.use(validate());
router.post('/', function *(){
yield this.validateQueries(
{
name: 'required|minLength:4',
girlfiend: 'requiredIf:age,25',
wife: 'requiredNotIf:age,22',
foo: 'requiredWith:bar,baz',
foobar: 'requiredWithAll:barbaz,bazbaz',
gandalf: 'requiredWithout:Saruman',
tyrion: 'requiredWithoutAll:tywin,cercei',
age: 'numeric',
teenage: 'digitsBetween:13,19',
date: 'dateFormat:MMDDYYYY',
birthdate: 'date',
past: 'before:2015-10-06',
future: 'after:2015-10-07',
gender: 'in:male, female',
genres: 'notIn:Pop,Metal',
grade: 'accepted',
nickname: 'alpha',
nospaces: 'alphaDash',
email: 'email',
alphanum: 'alphaNumeric',
password: 'between:6,15'
},
{
'name.required': 'The name field is a required one'
},
{
before: {
name: 'lowercase',
nickname: 'uppercase',
snum: 'integer',
sword: 'trim',
lword: 'ltrim',
rword: 'rtrim',
dnum: 'float',
bword: 'boolean',
},
after: {
obj: 'json',
eword: 'escape',
reword: 'replace:come,came',
shaword: 'sha1',
mdword: 'md5',
hexword: 'hex:sha256'
}
}
)
if (this.validationErrors) {
this.status = 422;
this.body = this.validationErrors;
} else {
this.status = 200;
this.body = { success: true }
}
});
app.use(router.routes()).use(router.allowedMethods());
File Validations
var app = require('koa')();
var router = (new require('koa-router'))();
var koaBody = require('koa-better-body');
require('koa-qs')(app, 'extended');
var validate = require('koa-validation');
app.use(koaBody({
'multipart': true
}));
app.use(validate());
router.post('/files', function *(){
yield this.validateFiles({
'jsFile':'required|size:min,10kb,max,20kb',
'imgFile': 'required|image',
'imgFile1': 'mime:jpg',
'imgFile2': 'extension:jpg',
'pkgFile': 'name:package'
},true, {}, {
jsFile: {
action: 'move',
args: __dirname + '/../files/tmp/rules.js',
callback: function *(validator, file, destination){
validator.addError(jsFile, 'action', 'move', 'Just checking if the callback action works!!')
}
},
imgFile: [
{
action: 'copy',
args: __dirname + '/../files/tmp/panda.jpg'
},
{
action: 'delete'
}
]
});
if (this.validationErrors) {
this.status = 422;
this.body = this.validationErrors;
} else {
this.status = 200;
this.body = { success: true }
}
});
app.use(router.routes()).use(router.allowedMethods());