/express-joi-middleware

Express Joi Middleware

Primary LanguageJavaScriptMIT LicenseMIT

Express Joi Middleware

Join the chat at https://gitter.im/express-joi-middleware/Lobby Build Status Build Status npm Dependency Status Coverage Status

Description

Implementation of Joi middleware for ExpressJS.

Features

  • Joi validator middleware for ExpressJS
  • Fully customizable (Your can give your validation callback, Joi options, allow the middleware to respond Bad Request, ...)
  • Possible to give your 'Joi' module

How to use

Install

npm install --save express-joi-middleware

Example Usage

const express = require('express');
const bodyParser = require('body-parser');
const expressJoiMiddleware = require('express-joi-middleware');

const app = express();

app.use(bodyParser.json());
const bodySchema = {
    body: {
        id: Joi.string().min(5).required(),
    },
};
const options = {
    wantResponse: true,
};
app.post('/body', expressJoiMiddleware(bodySchema, options), (req, res) => res.json(req.validated));

app.listen(8080);

API

Schema

A javascript object with these possible keys :

  • body
  • query
  • params
  • headers

In these keys, you must provide an object with a 'Joi' validation.

Options

A javascript object with these possible keys :

  • joi
  • joiOptions
  • validationCallback
  • wantResponse
  • overrideBody

joi

This key is a possibility to pass a Joi instance if you want to pass an old (or new) Joi module version.

Default value : Library version.

joiOptions

This key is for all Joi options in validate.

Default value : {}.

wantResponse

This option is here if you want that the library send the response with a 400 as status code and the Joi Error details part as body. Otherwise, the library will 'next' the Joi Error. You can catch them like that :

app.use((err, req, res, next) => {
    if (err.isJoi) {
        res.status(400).json(err.details);
        return;
    }
    
    res.status(500).send('Internal Server Error');
});

Default value : false (the library will 'next' error).

overrideBody

This option is here to override 'body' in request instead of creating a new key : 'validated'.

Default value : false (the library will create a 'validated' key in request).

validationCallback

This option is here to provide a way to change the 'validation' callback.

This option must be a function (a) that return another function (b).

The first function (a) will have these parameters :

  • req (request)
  • res (response)
  • next (next function)
  • options (options of the middleware)

The second function (b) will have these parameters :

  • err (Joi Error)
  • value (The validated value with any type conversions and other modifiers applied (the input is left unchanged). See the callback "value" here)

Thanks

  • My wife BH to support me doing this

Author

  • Oxyno-zeta (Havrileck Alexandre)

License

MIT (See in License.md)