Skip to content

Latest commit

 

History

History
160 lines (117 loc) · 5.63 KB

README.md

File metadata and controls

160 lines (117 loc) · 5.63 KB

koa-router-joi-validation

npm node Build Status codecov Maintainability David deps Known Vulnerabilities NPM

NPM

⚡️Super Light, configurable Koa router validator middleware that uses Joi.⚡️

Install

npm install koa-router-joi-validation -S

Why

  • It uses Joi (The most powerful schema description language and data validator for JavaScript.)
  • Input validation (query, params, body, headers).
  • Output validation, based on the HTTP returned code from the router 200, 204 ...etc.
  • Configurable.
  • It does only one thing (validation) and it does it right.
  • Loose coupling with koa-router, means:
    • Built-for koa-router and NOT [koa-router Built-in].
    • Standard routes function signature.
    • Clean changelog and No unnecessary updates (it always concerns the package itself).
    • Always have access to await next().
    • Tiny codebase.
  • 100% 🔥 test coverage.

Usage

The middleware function takes an object as argument

import validate, { Joi } from ('koa-router-joi-validation');
.....
    validate({
      query: // Joi schema object
      body: // Joi schema object
      params: // Joi schema object
      headers: // Joi schema object
      200: // Joi schema object
      503: // Joi schema object
      .....
      config: {
        denyUnknown: [],
        httpErrorCode: 400,
        nextOnError: false,
        alternate: []
      }
    }),
.....

validate(object)

The object contains the next keys:

Key Type Validates Note
query Joi Schema Object ctx.query
params Joi Schema Object ctx.params
headers Joi Schema Object ctx.headers
body Joi Schema Object ctx.request.body ⚠️ use a body parser e.g. koa-bodyparser
200..503 Joi SchemaObject ctx.body when ctx.status === 200..503
config Object Use it to change the validator behavior:

config

  • denyUnknown

    allow/disallow undeclared values in the schema

    Type array.

    default [].

    e.g. denyUnknown["headers"] the request fail ONLY if all the headers entries are declared in schema.

  • httpErrorCode

    The returned http error code when the validation fails

    Type int HTTP code (400... 503)

    default 400 (Bad request)

  • nextOnError

    If true, the validator will not throw an error and the execution flow will continue (await next())

    ⚠️ Note: in that case the validation error will be found in ctx.state.routeValidationError

    Type bool

    default false

  • alternate

    Allows alternative validation in the schema. It is a wrapper of Joi's alternatives function.

    Type array.

    default [].

    e.g. alternate["body", "query"] alternative validation will be applied on the request's query and body parameters. The request fails if both are incorrect. If any parameter from the list succeed the validation, request will pass and continue the execution flow.

Example

import Koa from "koa";
import Router from "@koa/router";
import validate, { Joi } from ('koa-router-joi-validation');

const app = new Koa();
const router = new Router()

router.get(
    "/hello/:id",
    validate({
      query: {
        q: Joi.string().required()
      },
      params: {
        id: Joi.string().required()
      },
      headers: {
        "Content-Type": Joi.string()
          .valid("application/json", "application/javascript")
          .required()
      },
      200: {
        succuss: Joi.bool()
      }
    }),
    async (ctx, next) => {
      ctx.body = {
        succuss: true
      };
      await next();
    }
  );

app.use(router.routes());

Licences