All Projects → chentsulin → koa-context-validator

chentsulin / koa-context-validator

Licence: MIT license
A robust context validator for koajs. Use Joi behind the scenes.

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to koa-context-validator

midwayjs-crud
基于 Typescript+MidwayJs+Nacos 的微服务开发架构
Stars: ✭ 45 (-8.16%)
Mutual labels:  koa
node-typescript-starter
REST API using Node with typescript, KOA framework. TypeORM for SQL. Middlewares JWT (auth), CORS, Winston Logger, Error, Response
Stars: ✭ 19 (-61.22%)
Mutual labels:  koa
GithubProfile
Visualizing GitHub profile
Stars: ✭ 45 (-8.16%)
Mutual labels:  koa
fullstack-playground
Monorepo playground with GraphQL Server, Rest API Server, typescript config, test utils, jest config, webpack and more
Stars: ✭ 47 (-4.08%)
Mutual labels:  koa
graphql-compose-elasticsearch
Graphql App using Node with typescript, KOA framework and Elasticsearch
Stars: ✭ 40 (-18.37%)
Mutual labels:  koa
nodejs-api-kickstarter
A batteries included NodeJS API Kickstater focused on extensability and developer productivity.
Stars: ✭ 20 (-59.18%)
Mutual labels:  koa
back-boilerplate
A boilerplate for building RESTful APIs using Node.js, PostgreSQL, koa, knex, bookshelf.
Stars: ✭ 33 (-32.65%)
Mutual labels:  koa
campus-leaflets
校园传单是一个使用 Node.js、MongoDB、Koa、EJS、MDL、Less、RequireJS 和 Gulp 开发的 Node 应用程序。
Stars: ✭ 16 (-67.35%)
Mutual labels:  koa
objection-authorize
isomorphic, "magical" authorization integration with Objection.js 🎉
Stars: ✭ 71 (+44.9%)
Mutual labels:  koa
koa-simple-ratelimit
Simple rate limiter for Koa.js v2 web framework
Stars: ✭ 17 (-65.31%)
Mutual labels:  koa
shopify-node-react-app
Shopify paid app in Node.js & React.js that connects to a store and lets merchants select products to automatically discount them in the Shopify admin interface.
Stars: ✭ 29 (-40.82%)
Mutual labels:  koa
koa-babel-webpack-boilerplate
A simple boilerplate to create REST apps with koa2, babel and webpack
Stars: ✭ 47 (-4.08%)
Mutual labels:  koa
koa2-swagger-ui
Swagger UI as Koa v2 middleware
Stars: ✭ 95 (+93.88%)
Mutual labels:  koa
koa-better-error-handler
A better error-handler for Lad and Koa. Makes `ctx.throw` awesome (best used with koa-404-handler)
Stars: ✭ 51 (+4.08%)
Mutual labels:  koa
kaonjs
Kaon.js is a react isomorphic app solution. It contains webpack build, hot reloading, code splitting and server side rendering.
Stars: ✭ 21 (-57.14%)
Mutual labels:  koa
rncms
🔥 Rncms 是基于 Koa2 + Webpack4 + Reactjs 结构简单 Cms 易于开发企业站和文档系统【已废弃】
Stars: ✭ 52 (+6.12%)
Mutual labels:  koa
blog
✍️无他术,唯勤读书而多为之,自工。
Stars: ✭ 62 (+26.53%)
Mutual labels:  koa
koa-cache-lite
Zero-dependency koa router cache
Stars: ✭ 27 (-44.9%)
Mutual labels:  koa
Rephic
💼 Rephic 是一个基于 Koa 的 React 服务端渲染工程脚手架。支持 React-Router, Redux 以及 Less, Sass。
Stars: ✭ 23 (-53.06%)
Mutual labels:  koa
koa
A golang framework like koa.js and has the best performance with net/http.
Stars: ✭ 30 (-38.78%)
Mutual labels:  koa

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].