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.


    npm i @condiments/relish

    DownloadsWeekly Downloads






    Unpacked Size

    12.1 kB

    Total Files


    Last publish


    • gentleman-turk