An A validation middleware for express using the Joi validation suite from Eran Hammer/Walmart Labs

npm install express-joi
1 downloads in the last day
44 downloads in the last week
91 downloads in the last month


Build Status

A validation middleware for express using the Joi validation suite from Eran Hammer/Walmart Labs.


npm install express-joi


var express = require('express');
var expressJoi = require('express-joi');

var Joi = expressJoi.Joi; // The exposed Joi object used to create schemas and custom types

var app = express();

// Use the Joi object to create a few schemas for your routes. 
var getUsersSchema = {
  limit: expressJoi.Joi.types.Number().integer().min(1).max(25),
  offset: expressJoi.Joi.types.Number().integer().min(0).max(25),
  name: expressJoi.Joi.types.String().alphanum().min(2).max(25)

var updateUserSchema = {
  userId: Joi.types.String().alphanum().min(10).max(20),
  name: Joi.types.String().min(3).max(50)

// Attach the validator to the route definitions
app.get('/users', expressJoi.joiValidate(getUsersSchema), handleUsers);
app.put('/users/:userId', expressJoi.joiValidate(updateUserSchema), handleUpdateUser);


If a validation error occurs it will either be handled by your express error handling middleware or thrown.

Strict mode

joiValidate takes a second optional object which will accept a strict key of true or false. When true, Joi will validate every parameter in req.params, req.body, and req.query. If false, Joi will only validate parameters specified in the given validation object and pass any others directly through.

app.get('/users', expressJoi.joiValidate(schema, { strict: false }, ...);

Consolidated Parameters

Upon successful validation express-joi will add an items object to req with all parameters from req.body, req.params, and req.query.

function handleUsers(req, res) {
    var limit = req.items.limit;
    var offset = req.items.offset;

    // Do stuff...

Joi Information

All Joi built in types can be used with this middleware. Information on types and creating custom ones can be found at:

Running Tests

To run the test suite first invoke the following command within the repo, installing the development dependencies:

npm install

then run the tests:

npm test
npm loves you