• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

chentsulin/koa-context-validator: A robust context validator for koajs. Use Joi ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

chentsulin/koa-context-validator

开源软件地址:

https://github.com/chentsulin/koa-context-validator

开源编程语言:

TypeScript 92.5%

开源软件介绍:

koa-context-validator

npm version Build Status Coverage Status

A robust context validator for koajs. Use Joi behind the scenes.

Installation

$ npm install koa-context-validator joi

Usage

query Validation

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(),
    }),
  }),
);

body Validation

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(),
    }),
  }),
);

headers Validation

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(),
  }),
);

With koa-compose

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;
    },
  ]),
);

With koa-mount

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(),
      }),
    }),
  ),
);

With @koa/router

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());

With options

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,
    },
  ),
);

Asynchronous Operations

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),
    }),
  }),
);

With Joi.ref

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')),
    }),
  }),
);

Koa 1.x

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(),
      }),
    }),
  ),
);

API

validator(schema, options?)

schema

Required Type: object

A object which has optional query, body, headers and params schema to validate.

options

Just be passed to Joi's validate function as options:

https://joi.dev/api/?v=17.4.2#anyvalidatevalue-options

Joi

The Joi object from the joi package.

TypeScript

As of version 1.0.0 we've added initial support for TypeScript.

License

MIT © C.T. Lin




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap