@condiments/relish
v6.0.0
Published
Better error messages for Hapi.js Joi validation. This is branched from dialexa/relish since that appears abandoned.
Downloads
1,504
Maintainers
Readme
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.
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.