Koajv
Koa middleware factory to validate, querystring, body payload, route params
You can find examples of how to use this library. You can also look at the tests scenarios in the tests directory to get running examples to use.
Breaking changes :
- v1.0.0 -> v2.0.0 : The validation error format has changed
Minor changes :
- v2.0.0 -> v2.1.0 : Add support for custom keywords
Body validation :
In this example the call can looks like : POST http://host.com/example/body
const koajv = const ajvOptions = allErrors: true useDefaults: true schemaId: 'auto' keywords: trim: type: 'string' modifying: true { return { iftypeof data === 'string' ifsch parentDataproperty = data return true return false } } const schema = id: 'userSchema' type: 'object' additionalProperties: false properties: id: type: 'integer' name: type: 'string' category: type: 'string' pattern: '^Teacher|Student$' const bodyValidatorMiddleware = koajv // Wille check ctx.request.body const validator = koajv // return a method try // If the object is not matching the schema an execption is thrown catch err router
Querystring validation :
In this example the call can looks like : GET http://host.com/example/query?name=test&category=Student
const koajv = const ajvOptions = allErrors: true useDefaults: true schemaId: 'auto' const schema = id: 'querySchema' type: 'object' additionalProperties: false properties: name: type: 'string' category: type: 'string' pattern: '^Teacher|Student$' const queryValidatorMiddleware = koajv // Will check ctx.request.query router
Params validation :
In this example the call can looks like : GET http://host.com/example/params/teacher
const koajv = const ajvOptions = allErrors: true useDefaults: true schemaId: 'auto' const schema = id: 'paramsSchema' type: 'object' additionalProperties: false properties: category: type: 'string' pattern: `^teacher|student$` const paramsValidatorMiddleware = koajv // Will check ctx.params router
Generic validation :
You can also instantiate a validator function by using the facotry method `koajv.createValidator()'
const koajv = const ajvOptions = allErrors: true useDefaults: true schemaId: 'auto' const schema = id: 'userSchema' type: 'object' additionalProperties: false properties: id: type: 'integer' name: type: 'string' category: type: 'string' pattern: '^Teacher|Student$' const validator = koajv // return a method try // If the object is not matching the schema an execption is thrown catch err
Error Handling :
Here is a simple example of middleware to catch koajv errors :
app
Custom keywords :
To add custom keywords you can pass it as an options
const koajv = const ajvOptions = allErrors: true useDefaults: true schemaId: 'auto' keywords: trim: type: 'string' modifying: true { return { iftypeof data === 'string' ifsch parentDataproperty = data return true return false } }
Tests
To Launch the tests :
- run :
$ npm install
- run :
$ npm test
- run :
$ npm run watch
: It launch test when you change the code
(The tests will run a koa app on port 9000 be sure that this port is available)
Code Coverage
After running $ npm test
you can access the code coverage report here : ./coverage/index.html