6.0.0 • Public • Published

Relish Logo

Better error messages for Hapi.js Joi validation

NPM Version Build Status Coverage Status


Joi provides awesome schema validation, but the error messages returned are not user-friendly. This package returns a more user-friendly version of Joi's default response and allows for custom error messages.

This is taken from the original Relish package which appears to be abandoned.

Default Joi Response

  "statusCode": 400,
  "error": "Bad Request",
  "message": "child \"data\" fails because [child \"name\" fails because [\"name\" is not allowed to be empty], child \"email\" fails because [\"email\" must be a valid email]]",
  "validation": {
    "source": "payload",
    "keys": [

Example Relish Response

  "statusCode": 400,
  "error": "Bad Request",
  "message": "\"name\" is not allowed to be empty, \"email\" must be a valid email",
  "validation": {
    "source": "payload",
    "errors": [
        "key": "name",
        "path": "data.name",
        "message": "\"name\" is not allowed to be empty",
        "type": "any",
        "constraint": "required"
        "key": "email",
        "path": "data.email",
        "message": "\"email\" must be a valid email",
        "type": "string",
        "constraint": "email"


npm install @condiments/relish --save


First load and initialize the module

// load the package and set custom message options
const Relish = require('@condiments/relish')({
  messages: {
    'data.name': 'Please enter your full name'

Once initialized, this package exposes a custom failAction handler that can be used in your Hapi.js Route Options.

// call the failAction handler in your route options
  method: 'POST',
  path: '/',
  config: {
    validate: {
      // set a custom failAction handler
      failAction: Relish.failAction,
      payload: {
        data: Joi.object({
          name: Joi.string().required(),
          email: Joi.string().email()
  handler: (request, h) => h.response()

Global Usage (alternative)

You can apply this module to all routes by setting the failAction in your server options.

  // ... other server options

  routes: {
    validate: {
      failAction: Relish.failAction

Version Compatibility

Below are the compatible versions of Relish for Hapi and Joi.

Relish Version Hapi Version Joi Version
1.x <= 16.6.0 <= 10.x
2.x >= 16.6.1, < 17.x >= 11.x
3.x >= 17.x >= 11.x
4.x >= 18.x >= 16.x
5.x >= 20.x >= 17.x
6.x >= 20.x >= 17.x

API Documentation

See the API Documentation for reference.

Package Sidebar


npm i @condiments/relish

Weekly Downloads






Unpacked Size

12.1 kB

Total Files


Last publish


  • gentleman-turk