A simple validator for your awesome koa application
validator.Joi
The package Joi version (prefer this version over your custom version in case of breaking changes)
validator.validate(options)
A koa middleware which will validate and transform the request
param | type | required | description |
---|---|---|---|
options | {} | true | |
options.type | string | Only if you want the request body to be parsed | the coBody parser to call, can be json form or text |
options.failure | int | false | The error code to throw on case of validation error, default to 400 |
options.options | {} | false | Options passed to Joi validator, such as allowUnknown |
options.body | Joi.object | false | A joi schema validated against the request body |
options.params | Joi.object | false | A joi schema validated against the request params |
options.headers | Joi.object | false | A joi schema validated against the request headers |
options.query | Joi.object | false | A joi schema validated against the request query |
router.post('/:number/:string/:date',
validator.validate({
type: 'json',
params: {
number: validator.Joi.number().required(),
string: validator.Joi.string().required(),
date: validator.Joi.date().required()
},
body: {
number: validator.Joi.number().required(),
string: validator.Joi.string().required(),
date: validator.Joi.date().required()
},
headers: validator.Joi.object({
number: validator.Joi.number().required(),
string: validator.Joi.string().required(),
date: validator.Joi.date().required()
}).options({ allowUnknown: true }),
query: {
number: validator.Joi.number().required(),
string: validator.Joi.string().required(),
date: validator.Joi.date().required()
}
}),
function * () {
this.assert(typeof this.params.number === 'number');
this.assert(typeof this.params.string === 'string');
this.assert(this.params.date instanceof Date);
['body', 'headers', 'query'].forEach(el => {
this.assert(typeof this.request[el].number === 'number');
this.assert(typeof this.request[el].string === 'string');
this.assert(this.request[el].date instanceof Date);
});
this.status = 204;
}
);