Koa router with yup input validation and Typescript support.
Install using npm
:
npm install @rudi23/koa-yup-router
NodeJS >= 12.0.0.
is required.
- all features of @koa/router as it's built on top of it
- input validation using yup
- Typescript support for request params, query, headers and body
- type casting request values
- body parsing using co-body and await-busboy
- multiple method support
- router middleware support
- custom error handler
- exposed route definitions
- meta data support
- supports both: CommonJs and ES Modules
import Koa from 'koa';
import YupRouter from '@rudi23/koa-yup-router';
const paramsSchema = yup.object({
id: yup.number().required(),
});
const querySchema = yup.object({
force: yup.boolean(),
});
const bodySchema = yup.object({
firstName: yup.string().required(),
lastName: yup.number().required(),
age: yup.number().required().min(0).max(100),
job: yup.string(),
});
const router = new YupRouter();
router.get('/', (ctx, next) => {
ctx.body = 'Hello koa-yup-router!';
});
router.addRoute<TypeOf<typeof paramsSchema>, TypeOf<typeof querySchema>, TypeOf<typeof bodySchema>>(
{
method: 'put',
path: '/user/:id',
validate: {
type: 'json',
body: bodySchema,
params: paramsSchema,
query: querySchema,
},
handler: (ctx) => {
ctx.body = {
params: ctx.params,
query: ctx.request.query,
body: ctx.request.body,
headers: ctx.request.headers,
};
},
},
);
const app = new Koa();
app.use(router.middleware());
app.listen(3000);
const Koa = require('koa');
const YupRouter = require('@rudi23/koa-yup-router');
const paramsSchema = yup.object({
id: yup.number().required(),
});
const querySchema = yup.object({
force: yup.boolean(),
});
const bodySchema = yup.object({
firstName: yup.string().required(),
lastName: yup.number().required(),
age: yup.number().required().min(0).max(100),
job: yup.string(),
});
const router = new YupRouter();
router.get('/', (ctx, next) => {
ctx.body = 'Hello koa-yup-router!';
});
router.addRoute({
method: 'put',
path: '/user/:id',
validate: {
type: 'json',
body: bodySchema,
params: paramsSchema,
query: querySchema,
},
handler: (ctx) => {
ctx.body = {
params: ctx.params,
query: ctx.request.query,
body: ctx.request.body,
headers: ctx.request.headers,
};
},
});
const app = new Koa();
app.use(router.middleware());
app.listen(3000);
import Koa from 'koa';
import YupRouter from '@rudi23/koa-yup-router';
const paramsSchema = yup.object({
id: yup.number().required(),
});
const querySchema = yup.object({
force: yup.boolean(),
});
const bodySchema = yup.object({
firstName: yup.string().required(),
lastName: yup.number().required(),
age: yup.number().required().min(0).max(100),
job: yup.string(),
});
const router = new YupRouter();
router.get('/', (ctx, next) => {
ctx.body = 'Hello koa-yup-router!';
});
router.addRoute({
method: 'put',
path: '/user/:id',
validate: {
type: 'json',
body: bodySchema,
params: paramsSchema,
query: querySchema,
},
handler: (ctx) => {
ctx.body = {
params: ctx.params,
query: ctx.request.query,
body: ctx.request.body,
headers: ctx.request.headers,
};
},
});
const app = new Koa();
app.use(router.middleware());
app.listen(3000);