Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

koa-middle-validator

npm version

Koa middleware for the validator module. Support v1 and v2.

Installation

npm install koa-middle-validator

Usage

constutil=require('util'),constKoa=require('koa');constbodyParser=require('koa-bodyparser');constconvert=require('koa-convert');constkoaValidator=require('koa-middle-validator');constRouter=require('koa-router');const_=require('lodash');constapp=newKoa();constrouter=newRouter();app.use(convert(bodyParser()));app.use(koaValidator({customValidators: {isArray: function(value){return_.isArray(value);},isAsyncTest: function(testparam){returnnewPromise(function(resolve,reject){setTimeout(function(){if(testparam==='42'){returnresolve();}reject();},200);});}},customSanitizers: {toTestSanitize: function(){return"!!!!";}}}));// this line must be immediately after any of the bodyParser middlewares!router.get(/\/test(\d+)/,validation);router.get('/:testparam?',validation);router.post('/:testparam?',validation);app.use(router.routes())app.use(router.allowedMethods({throw: true}))functionvalidation(ctx){ctx.checkBody('postparam','Invalid postparam').notEmpty().isInt();//ctx.checkParams('urlparam', 'Invalid urlparam').isAlpha();ctx.checkQuery('getparam','Invalid getparam').isInt();ctx.sanitizeBody('postparam').toBoolean();//ctx.sanitizeParams('urlparam').toBoolean();ctx.sanitizeQuery('getparam').toBoolean();ctx.sanitize('postparam').toBoolean();returnctx.getValidationResult().then(function(result){ctx.body={//}});}app.listen(8888);

Middleware Options

errorFormatter

function(param,msg,value)

customValidators

{ "validatorName": function(value, [additional arguments]), ... }

customSanitizers

{ "sanitizerName": function(value, [additional arguments]), ... }

Validation

ctx.check();

ctx.check('testparam','Error Message').notEmpty().isInt();ctx.check('testparam.child','Error Message').isInt();// find nested paramsctx.check(['testparam','child'],'Error Message').isInt();// find nested params

ctx.assert();

Alias for ctx.check().

ctx.validate();

Alias for ctx.check().

ctx.checkBody();

Same as ctx.check(), but only looks in ctx.body.

ctx.checkQuery();

Same as ctx.check(), but only looks in ctx.query.

ctx.checkParams();

Same as ctx.check(), but only looks in ctx.params.

ctx.checkHeaders();

Only checks ctx.headers. This method is not covered by the general ctx.check().

ctx.checkCookies();

Only checks ctx.cookies. This method is not covered by the general ctx.check().

Validation by Schema

ctx.checkBody({'email': {optional: {options: {checkFalsy: true}// or: [{ checkFalsy: true }]},isEmail: {errorMessage: 'Invalid Email'}},'password': {notEmpty: true,matches: {options: ['example','i']// pass options to the validator with the options property as an array// options: [/example/i] // matches also accepts the full expression in the first parameter},errorMessage: 'Invalid Password'// Error message for the parameter},'name.first': {//optional: true,// won't validate if field is emptyisLength: {options: [{min: 2,max: 10}],errorMessage: 'Must be between 2 and 10 chars long'// Error message for the validator, takes precedent over parameter message},errorMessage: 'Invalid First Name'}});

You can also define a specific location to validate against in the schema by adding in parameter as shown below:

ctx.check({'email': {in: 'query',notEmpty: true,isEmail: {errorMessage: 'Invalid Email'}}});

ctx.check(schema); // will check 'password' no matter where it is but 'email' in query params

ctx.checkQuery(schema); // will check 'password' and 'email' in query params

ctx.checkBody(schema); // will check 'password' in body but 'email' in query params

ctx.checkParams(schema);

ctx.checkHeaders(schema); // will check 'password' in headers but 'email' in query params

Validation result

getValidationResult

Runs all validations and returns a validation result object for the errors gathered, for both sync and async validators.

ctx.assert('email','required').notEmpty();ctx.assert('email','valid email required').isEmail();ctx.assert('password','6 to 20 characters required').len(6,20);ctx.getValidationResult().then(function(result){// do something with the validation resultif(!errors.isEmpty()){ctx.body=errors.array();}else{// ctx.body = {};}});

getValidationLegalResult (v1.1.0)

Runs all validations and return the validated values;

try{ctx.checkBody({})constvalues=awaitctx.getValidationLegalResult()mongoose.model.save(values)}catch(e){// $$emit error}

Optional input

ctx.checkBody('email').optional().isEmail();//if there is no error, ctx.request.body.email is either undefined or a valid mail.

Sanitizer

ctx.sanitize();

ctx.request.body.comment='a <span>comment</span>';ctx.request.body.username=' a user ';ctx.sanitize('comment').escape();// returns 'a &lt;span&gt;comment&lt;/span&gt;'ctx.sanitize('username').trim();// returns 'a user'console.log(ctx.request.body.comment);// 'a &lt;span&gt;comment&lt;/span&gt;'console.log(ctx.request.body.username);// 'a user'

ctx.filter();

Alias for ctx.sanitize().

ctx.sanitizeBody();

Same as ctx.sanitize(), but only looks in ctx.request.body.

ctx.sanitizeQuery();

Same as ctx.sanitize(), but only looks in ctx.request.query.

ctx.sanitizeParams();

Same as ctx.sanitize(), but only looks in ctx.params.

ctx.sanitizeHeaders();

Only sanitizes ctx.headers. This method is not covered by the general ctx.sanitize().

ctx.sanitizeCookies();

Only sanitizes ctx.cookies. This method is not covered by the general ctx.sanitize().

Sanitizer result

getSanitizerLegalResult (v1.1.0)

Runs all sanitizer and return the sanitized values;

try{ctx.sanitizeQuery('page').toInt()constvalues=awaitctx.getSanitizerLegalResult()mongoose.model.save(values)}catch(e){// $$emit error}

About

Koa middleware for the validator module. Support v1 and v2.

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages