A small wrapper for AJV designed to validate request bodies and query parameters.
$ npm install --save @yahapi/ajv-validate
import { bodyValidator } from 'ajv-validate';
const schema = {
id: 'bodySchema',
type: 'object',
properties: {
name: {
type: 'string',
minLength: 2,
},
},
};
bodyValidator.addSchema(schema);
const body = {
name: 'a',
};
const throwError = false;
// {
// path: '/name',
// code: 'min_length',
// message: 'should NOT be shorter than 2 characters',
// }
console.log(bodyValidator.validate('bodySchema', body, throwError));
This library manages two AJV validation instances, one for validating a request body and one for validating query parameters. The difference between them are:
| bodyValidator | queryValidator
-----------------|---------------|----------------------- coerceTypes | false | true pointerType | jsonPointer | queryPath
Explanation options
- coerceTypes: automatically attempt to convert properties to their expected types.
- pointerType: defines
path
format. EitherjsonPointer
as formatted by the JSON Pointer spec orqueryPath
which prefixed error paths with a question mark, e.g.?name
. Default isjsonPointer
.
Alias for AJV addSchema()
.
Registers a JSON schema to validate.
import { queryValidator } from '@yahapi/ajv-validate';
const schema = {
id: 'testBody',
type: 'object',
properties: {
limit: { type: 'integer', minimum: 0 },
},
};
queryValidator.addSchema(schema);
Alias for AJV addKeyword()
.
Alias for AJV addFormat()
.
Validates a message body against specified schema. A schema is referenced by its id or keyword.
Throws a ValidationErrors by default. To simply return the validation errors set throwError
to false
.
import { bodyValidator } from '@yahapi/ajv-validate';
const schema = {
id: 'testBody',
type: 'object',
properties: {
limit: { type: 'integer', minimum: 0 },
},
};
bodyValidator.addSchema(schema);
const errors = bodyValidator.validate('testBody', { name: 'test' }, false);
console.log(errors);
validate()
returns an array of errors formatted as follows:
{
code: 'minimum',
path: '?limit',
message: 'should be >= 0',
}
Property | Description |
---|---|
code | Error code formatted in snake_case. |
path | JSON pointer or query parameter name indicating which property validation failed. |
message | Human-readable error message. |
The following formats overwrite or are in addition to those specified in AJV:
- date-time: the standard
date-time
format is replaced by amoment(...).isValid()
which accepts any IS0-8601 string.
The keywords listed in this section are in addition to those specified by AJV.
When you specify sort order in an url like this ?sort=a,-b
you can use the schema keyword sortOptions
to validate which sorts are allowed. Example:
const schema = {
type: 'object',
properties: {
sort: {
type: 'string',
sortOptions: ['a', '-b', '+c'],
},
},
};
addQuerySchema(schema, 'testQuery');
validateQuery('testQuery', { sort: '+a,-b,c' }); // This is valid
validateQuery('testQuery', { sort: '+b' }); // This is invalid
validateQuery('testQuery', { sort: '+a,-a' }); // This is invalid