Stop to write CIERR(Check-If-Error-Return-Repeatedly) style code, it can be done automatically!
- Quick start
varapp=require('koa')();varinput=require('koa-input');app.use(input('query','name',/^[a-zA-Z]+$/,'default value','Your name is invalid'));//same as://app.use(input.query('name', /^[a-zA-Z]+$/, 'default value', 'Your name is invalid'));app.use(function*(){this.body=this.request.query.name});- Support query, params(koa-router), body(koa-bodyparser) and headers etc.
varapp=require('koa')();varinput=require('koa-input');app.use(input('query','name',/^[a-zA-Z]+$/,'default value','Your name is invalid'));//orapp.use(input('params','name',/^[a-zA-Z]+$/,'default value','Your name is invalid'));//orapp.use(input('body','name',/^[a-zA-Z]+$/,'default value','Your name is invalid'));//orapp.use(input('headers','name',/^[a-zA-Z]+$/,'default value','Your name is invalid'));app.use(function*(){this.body=this.request.query.name;//orthis.body=this.request.params.name;//or this.body=this.params.name;//You don't need to change existed koa-router code//orthis.body=this.request.body.name;//orthis.body=this.request.headers.name;});- Support custom error handler
input.onError(function(name){varerror=newError(util.format('Invalid get %s',name));error.status=200;error.code=77;returnerror;});- Support special error
//String as error.messageapp.use(input('query','name',/^[a-zA-Z]+$/,undefined,'invalid query name'));//Number as error.statusapp.use(input('query','name',/^[a-zA-Z]+$/,undefined,400));//Object will be extended by input.error()app.use(input('query','name',/^[a-zA-Z]+$/,undefined,{status: 400,message: 'invalid query name'}));//The same as Objectapp.use(input('query','name',/^[a-zA-Z]+$/,undefined,newError('invalid query name')));- Support default value as an optional input
//set a not-`undefined` default value (function will be call and using it's return value)app.use(input('query','type',/^(cat|dog)$/,'dog'));app.use(input('query','time',/^[0-9]{13}$/,Date.now));app.use(input('query','type',/^(cat|dog)$/,null));//you can pass `null` if you want a `nil` default value//orapp.use(input('query','type',/^(cat|dog)$/,function(){}));//just pass an empty function to get a `undefined` as default value- Support Regex, Function, Object, Array, Basic-Type pattern to validate the input
//Function(you can use any other module like validator)app.use(input('query','email',validator.isEmail));//Object(it will get the value if match the key)app.use(input('query','status',{'normal': 0,'invalid': 1}));//Array(it must be element of the array)app.use(input('query','type',['cat','dog']));//String(it must be equal to)app.use(input('query','type','cat'));- Support multiple patterns
app.use(input('query','type',['cat','dog']));app.use(input('query','type',{cat: 1,dog: 2}));app.use(input('query','type',function(value){returnvalue==='cat';}));- Support builder or object options
//if you want to ignore some middle-arguments:app.use(input('query','name',undefined,undefined,'invalid input'));//ORapp.use(input.source('query').name('name').error('invalid input').build());//ORapp.use(input({source: 'query',name: 'name',error: 'invalid input'}));//ORapp.use(input('query',{name: 'name',error: 'invalid input'}));- Dependence on no-input
