⚡️Super Light, configurable Koa router validator middleware that uses Joi.⚡️
MIT License
⚡️Super Light, configurable Koa router validator middleware that uses Joi.⚡️
npm install koa-router-joi-validation -S
query
, params
, body
, headers
).200
, 204
...etc.koa-router
, means:
koa-router
and NOT [koa-router
Built-in].await next()
.The middleware function takes an object as argument
import validate, { Joi } from ('koa-router-joi-validation');
.....
validate({
query: // Joi schema object
body: // Joi schema object
params: // Joi schema object
headers: // Joi schema object
200: // Joi schema object
503: // Joi schema object
.....
config: {
denyUnknown: [],
httpErrorCode: 400,
nextOnError: false,
alternate: []
}
}),
.....
validate(object)
Key | Type | Validates | Note |
---|---|---|---|
query | Joi Schema Object | ctx.query |
|
params | Joi Schema Object | ctx.params |
|
headers | Joi Schema Object | ctx.headers |
|
body | Joi Schema Object | ctx.request.body |
⚠️ use a body parser e.g. koa-bodyparser |
200..503 | Joi SchemaObject | ctx.body |
when ctx.status === 200..503 |
config | Object | Use it to change the validator behavior: |
config
denyUnknown
allow/disallow undeclared values in the schema
Type array
.
default [].
e.g. denyUnknown["headers"]
the request fail ONLY if all the headers entries are declared in schema.
httpErrorCode
The returned http error code when the validation fails
Type int
HTTP code (400
... 503
)
default 400
(Bad request)
nextOnError
If true
, the validator will not throw an error and the execution flow will continue (await next()
)
⚠️ Note: in that case the validation error will be found in ctx.state.routeValidationError
Type bool
default false
alternate
Allows alternative validation in the schema. It is a wrapper of Joi's alternatives function.
Type array
.
default [].
e.g. alternate["body", "query"]
alternative validation will be applied on the request's query
and body
parameters. The request fails if both are incorrect. If any parameter from the list succeed the validation, request will pass and continue the execution flow.
import Koa from "koa";
import Router from "@koa/router";
import validate, { Joi } from ('koa-router-joi-validation');
const app = new Koa();
const router = new Router()
router.get(
"/hello/:id",
validate({
query: {
q: Joi.string().required()
},
params: {
id: Joi.string().required()
},
headers: {
"Content-Type": Joi.string()
.valid("application/json", "application/javascript")
.required()
},
200: {
succuss: Joi.bool()
}
}),
async (ctx, next) => {
ctx.body = {
succuss: true
};
await next();
}
);
app.use(router.routes());