2.3.0 • Published 10 months ago

@rudi23/koa-yup-router v2.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

koa-yup-router

Koa router with yup input validation and Typescript support.

NPM version npm download

Installation

Install using npm:

npm install @rudi23/koa-yup-router

NodeJS >= 12.0.0. is required.

Features

  • 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

Example

Typescript
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);
Javascript - CommonJS
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);
Javascript - 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({
    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);

LICENSE

MIT

2.3.0

10 months ago

2.2.4

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.1.1

2 years ago

2.2.3

2 years ago

2.2.2

2 years ago

2.1.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago