@condiments/relish

    6.0.0 • Public • Published

    Relish Logo

    Better error messages for Hapi.js Joi validation

    NPM Version Build Status Coverage Status

    Introduction

    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": [
          "data.name",
          "data.email"
        ]
      }
    }

    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"
          }
        ]
      }
    }

    Installation

    npm install @condiments/relish --save

    Usage

    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
    server.route({
      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.

    Hapi.server({
      // ... 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.

    Install

    npm i @condiments/relish

    DownloadsWeekly Downloads

    72

    Version

    6.0.0

    License

    ISC

    Unpacked Size

    12.1 kB

    Total Files

    7

    Last publish

    Collaborators

    • gentleman-turk