@wastimy/joi-middleware

npm i @wastimy/joi-middleware

Readme

airbnb-style

https://www.npmjs.org/package/@wastimy/joi-middleware

npm install --save @wastimy/joi-middleware

Joi-Middleware is an express middleware function that wraps the joi validation library. This allows you to use this middleware on route to ensure that all received inputs are correct before any handler function. The middleware allows you to validate req.params, req.headers, and req.query.

The middleware will also validate:

express Compatibility

Joi-Middleware is tested and has full compatibility with express 4 and 5.

Example Usage

Example of using on a single POST route to validate req.body.

const express = require('express');
const BodyParser = require('body-parser');
const Joi = require('@hapi/joi');
const JoiValidator = require('@wastimy/joi-middleware');

const AddProductSchema = Joi.object().keys({
  form: Joi.object().keys({
    name: Joi.string().required(),
  }).required(),
}).required();

const AddProductValidator = new JoiValidator(
  AddProductSchema,
  'body',
  { stripUnknown: true } // Check Joi documentation for allowed options
).validate;

const app = express();
app.use(BodyParser.json());

app.post(
  '/product',
  productBodyValidator, // Just add the validator function before your handler one
  (req, res) => {
    // At this point, req.body has been validated
    res.json({ message: 'Body is valid' });
  }
);

Joi

Joi-Middleware use local version of Joi. We will regulary upgrade version of Joi if any major version is pushed to ensure the best compatibility.

Allowed keys

An enum containing all the segments of req objects that joi-middleware should be able to validate.

{
  Body: 'body',
  Query: 'query',
  Cookies: 'cookies',
  Headers: 'headers',
  Params: 'params',
  SignedCookies: 'signedCookies',
}

Error

If an error happen while validating your data the original Joi error is throw. Note that express will treat this thrown error with the default error handler.

Issues

Before opening issues on this repo, make sure your joi schema is correct and working as you intended. The bulk of this code is just exposing the joi API as express middleware. All of the heavy lifting still happens inside Joi.

Jump To