RocksonZeta / koa-validate

validate koa request params and format request params
https://github.com/RocksonZeta/koa-validate
MIT License
284 stars 32 forks source link

koa-validate

Build Status Coverage Status NPM version Dependency Status

NPM

validate koa request params and format request params

Installation

$ npm install koa-validate --save

Basic usage:

'use strict';
var koa = require('koa');
var app = koa();
var router = require('koa-router')();
require('koa-validate')(app);

app.use(require('koa-body')({multipart:true , formidable:{keepExtensions:true}}));
app.use(router.routes()).use(router.allowedMethods());
router.post('/signup', function * () {
    //optional() means this param may not in the params.
    this.checkBody('name').optional().len(2, 20,"are you kidding me?");
    this.checkBody('email').isEmail("your enter a bad email.");
    this.checkBody('password').notEmpty().len(3, 20).md5();
    //empty() mean this param can be a empty string.
    this.checkBody('nick').optional().empty().len(3, 20);
    //also we can get the sanitized value 
    var age = this.checkBody('age').toInt().value;
    yield this.checkFile('icon').notEmpty().size(0,300*1024,'file too large').move("/static/icon/" , function*(file,context){
        //resize image
    });
    if (this.errors) {
        this.body = this.errors;
        return;
    }
});
router.get('/users', function * () {
    this.checkQuery('department').empty().in(["sale","finance"], "not support this department!").len(3, 20);    
    this.checkQuery('name').empty().len(2,20,"bad name.").trim().toLow();
    this.checkQuery('age').empty().gt(10,"too young!").lt(30,"to old!").toInt();
    if (this.errors) {
        this.body = this.errors;
        return;
    }
});
router.get('/user/:id', function * () {
    this.checkParams('id').toInt(0);
    if (this.errors) {
        this.body = this.errors;
        return;
    }
});
//json body,we can check it using [json path](https://github.com/flitbit/json-path)(like xpath)
router.post('/json' , function*(){
    this.checkBody('/store/book[0]/price').get(0).eq(8.95);
    this.checkBody('#/store/book[0]/category').first().trim().eq('reference');
    if (this.errors) {
        this.body = this.errors;
        return;
    }
})

app.listen(3000);

API

checkBody,checkQuery,checkParams will return a Validator instance. when use require('koa-validate')(app) ,the request context will bind the method:

Validator API

Access validator status:

Validators:

options,version or locale please see validator

Sanitizers:

For json path:

FileValidator:

Validators:

Sanitizers:

File sanitizers are generators,we should use yield to execute them. eg. yield this.checkFile('file').notEmpty().copy('/');

How to extends validate:

var Validator = require('koa-validate').Validator;
// to do what you want to.
//you can use this.key ,this.value,this.params,this.context,this.exists
//use addError(tip) , if you meet error.