
Better error messages for Hapi.js Joi validation


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.
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 relish --save
Usage
First load and initialize the module
const Relish = require('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.
server.route({
method: 'POST',
path: '/',
config: {
validate: {
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({
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 |
API Documentation
See the API Documentation for reference.