⚠️ Formats validation errors in Hapi
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...
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'
]
}
}
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'
}
}
}
$ npm install --save hapi-format-validation
const FormatValidation = require('hapi-format-validation');
server.register(FormatValidation, err => {
// server fun times
});
stripQuotes
: (optional) if true
, strips double quotation marks from around the path name in error messagescapitalize
: (optional) if true
, capitalizes the first letter of each error messagesequelize
: (optional) pass a Sequelize
instance to format unique key violations (more information below)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
}
);
{
statusCode: 500,
error: 'Internal Server Error',
message: 'An internal server error occurred'
}
{
'statusCode': 400,
'error': 'Bad Request',
'message': '"username" must be unique',
'validation': {
'source': 'payload',
'errors': {
'username': '"username" must be unique'
}
}
}
onPreResponse
hook and checking for Sequelize errors