1.2.2 • Published 4 years ago

koa-router-joi-validation v1.2.2

Weekly downloads
18
License
MIT
Repository
github
Last release
4 years ago

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:

KeyTypeValidatesNote
queryJoi Schema Objectctx.query
paramsJoi Schema Objectctx.params
headersJoi Schema Objectctx.headers
bodyJoi Schema Objectctx.request.body⚠️ use a body parser e.g. koa-bodyparser
200..503Joi SchemaObjectctx.bodywhen ctx.status === 200..503
configObjectUse 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

MIT

1.2.0

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago