2.0.1 • Published 5 years ago

chow-chow v2.0.1

Weekly downloads
3
License
ISC
Repository
github
Last release
5 years ago

logo

Simplify registration of Relish.js messages.

npm version Known Vulnerabilities GitHub license Build Status Coverage Status

Lead Maintainer: Robert Hernandez

Introduction

Relish provides "better error message for Hapi.js Joi validation."

However, in large scale applications managing the individual route validate functions custom messages can become tedious. Even though a common object may be defined in the hapi server's route configuration, this only facilitates common messages.

For example, if you need to have a option which is required on one route but optional on another, it is difficult to change the custom message.

Problem Example

    server.route({
        method: 'POST',
        path: '/relish/custom',
        options: {
            validate: {
                payload: {
                    input: Joi.string().min(3).max(10)
                },
                /// this is a bulky statement since it is a function call then a pointer to a function.
                failAction: Relish({
                    messages: {
                        input: 'input is required and must be between 3 and 10 characters in length'
                    }
                }).failAction
            },
            handler: handler
        }
    });

Solution Example

    server.route({
        method: 'POST',
        path: '/example',
        options: {
            validate: {
                payload: {
                    input: Joi.string().min(3).max(10)
                }
            },
            // hapi standard plugin syntax
            plugins: {
                chowChow: {
                    input: 'input is required and must be between 3 and 10 characters in length'
                }
            },
            handler: handler
        }
    });

Getting Started

Installation

npm install @condiments/chow-chow

Bootsrapping in hapi server

const server = new Hapi.Server({
    port: 3000,
    host: 'localhost'
});


const init = async () => {
    await server.register(require('@condiments/chow-chow'));
    // register routes
};

init();

Example Outputs

Example chow-chow

Request

curl http://localhost:3000/example -H "Content-Type: application/json" -d "{\"input\":\"HI\"}"

Response

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "input is required and must be between 3 and 10 characters in length",
    "validation": {
        "source": "payload",
        "errors": [
            {
                "key": "input",
                "path": "input",
                "message": "input is required and must be between 3 and 10 characters in length",
                "type": "string",
                "constraint": "min"
            }
        ]
    }
}

Default Relish

Request

curl http://localhost:3000/relish/default -H "Content-Type: application/json" -d "{\"input\":\"HI\"}"

Response

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "\"input\" length must be at least 3 characters long",
    "validation": {
        "source": "payload",
        "errors": [
            {
                "key": "input",
                "path": "input",
                "message": "\"input\" length must be at least 3 characters long",
                "type": "string",
                "constraint": "min"
            }
        ]
    }
}

Custom Relish

Request

curl http://localhost:3000/relish/custom -H "Content-Type: application/json" -d "{\"input\":\"HI\"}"

Response

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "input is required and must be between 3 and 10 characters in length",
    "validation": {
        "source": "payload",
        "errors": [
            {
                "key": "input",
                "path": "input",
                "message": "input is required and must be between 3 and 10 characters in length",
                "type": "string",
                "constraint": "min"
            }
        ]
    }
}

Native hapi

Request

curl http://localhost:3000/native -H "Content-Type: application/json" -d "{\"input\":\"HI\"}"

Response

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "Invalid request payload input"
}