A robust context validator for koajs. Use
Joi
behind the scenes.
$ npm install koa-context-validator joi
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';
const app = new Koa();
app.use(
validator({
query: Joi.object().keys({
username: Joi.string().required(),
}),
}),
);
import Koa from 'koa';
import bodyParser from 'koa-bodyparser';
import validator, { Joi } from 'koa-context-validator';
const app = new Koa();
app.use(bodyParser());
app.use(
validator({
body: Joi.object().keys({
username: Joi.string().required(),
age: Joi.number().required(),
}),
}),
);
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';
const app = new Koa();
app.use(
validator({
headers: Joi.object()
.keys({
username: Joi.string().required(),
})
.unknown(),
}),
);
import Koa from 'koa';
import compose from 'koa-compose';
import validator, { Joi } from 'koa-context-validator';
const app = new Koa();
app.use(
compose([
validator({
query: Joi.object().keys({
username: Joi.string().required(),
}),
}),
async (ctx) => {
ctx.body = ctx.request.query;
},
]),
);
import Koa from 'koa';
import mount from 'koa-mount';
import validator, { Joi } from 'koa-context-validator';
const app = new Koa();
app.use(
mount(
'/api',
validator({
query: Joi.object().keys({
username: Joi.string().required(),
}),
}),
),
);
import Koa from 'koa';
import Router from '@koa/router';
import validator, { Joi } from 'koa-context-validator';
const router = new Router();
router.get(
'/api/:username',
validator({
params: Joi.object().keys({
username: Joi.string().required(),
}),
}),
async (ctx) => {
ctx.body = ctx.params;
},
);
const app = new Koa();
app.use(router.middleware());
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';
app.use(
validator(
{
query: Joi.object().keys({
username: Joi.string().required(),
}),
},
{
abortEarly: true,
allowUnknown: false,
cache: true,
stripUnknown: true,
debug: false,
},
),
);
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';
const lookup = async (username) => {
const user = await db.get('user', username);
if (!user) {
throw new Error('Invalid username');
}
};
app.use(
validator({
body: Joi.object().keys({
username: Joi.string().external(lookup),
}),
}),
);
import Koa from 'koa';
import validator, { Joi } from 'koa-context-validator';
app.use(
validator({
body: Joi.object().keys({
username: Joi.string().default(Joi.ref('$defaultUsername')),
age: Joi.number().default(Joi.ref('$defaultAge')),
}),
}),
);
Use convert.back
from koa-convert
.
import koa from 'koa'; // koa 1.x
import convert from 'koa-convert';
import validator, { Joi } from 'koa-context-validator';
const app = koa();
app.use(
convert.back(
validator({
query: Joi.object().keys({
username: Joi.string().required(),
}),
}),
),
);
Required
Type: object
A object which has optional query
, body
, headers
and params
schema to validate.
Just be passed to Joi's validate function as options:
https://joi.dev/api/?v=17.4.2#anyvalidatevalue-options
The Joi
object from the joi package.
As of version 1.0.0 we've added initial support for TypeScript.
MIT © C.T. Lin