Need Private Modules

    hapi-format-validation

    2.3.2 • Public • Published

    hapi-format-validation

    Build Status

    This Hapi plugin formats validation errors in a way that is consistent, simple, and easy to render in client-side forms. Take your typical Joi validation error reply for instance...

    Before hapi-format-validation 😿

    {
      statusCode: 400,
      error: 'Bad Request',
      // this message should get formatted before displaying it to a user
      message: 'child "name" fails because ["name" is not allowed to be empty]. child "email" fails because ["email" must be a valid email]',
      validation: {
        source: 'payload',
        // extra work required of the client to link these keys to error messages :(
        keys: [
          'name',
          'email'
        ]
      }
    }

    After hapi-format-validation 😍

    {
      statusCode: 400,
      error: 'Bad Request',
      // a newline-separated string, ready-to-use if necessary
      message: '"name" is not allowed to be empty↵"email" must be a valid email',
      validation: {
        source: 'payload',
        // a simple key-value mapping of fields and their errors
        errors: {
          name: '"name" is not allowed to be empty',
          email: '"email" must be a valid email'
        }
      }
    }

    Installation

    $ npm install --save hapi-format-validation

    Usage

    const FormatValidation = require('hapi-format-validation');
     
    server.register(FormatValidation, err => {
      // server fun times
    });

    Options

    • stripQuotes: (optional) if true, strips double quotation marks from around the path name in error messages
    • capitalize: (optional) if true, capitalizes the first letter of each error message
    • sequelize: (optional) pass a Sequelize instance to format unique key violations (more information below)

    Sequelize integration

    hapi-format-validation also handles Sequelize unique key violation errors, which would otherwise be a 500 Internal Server Error. Pass your Sequelize instance (sold separately) as an option to the plugin when you register it to enable this feature.

    const FormatValidation = require('hapi-format-validation');
    const Sequelize = require('sequelize');
     
    const sequelize = new Sequelize(...);
     
    server.register(
      {
        register: FormatValidation,
        options: {sequelize}
      },
      err => {
        // do your server stuff
      }
    );

    Before

    {
      statusCode: 500,
      error: 'Internal Server Error',
      message: 'An internal server error occurred'
    }

    After

    {
      'statusCode': 400,
      'error': 'Bad Request',
      'message': '"username" must be unique',
      'validation': {
        'source': 'payload',
        'errors': {
          'username': '"username" must be unique'
        }
      }
    }

    Acknowledgements 👊

    Install

    npm i hapi-format-validation

    DownloadsWeekly Downloads

    11

    Version

    2.3.2

    License

    MIT

    Unpacked Size

    8.19 kB

    Total Files

    9

    Last publish

    Collaborators

    • trevorblades