@obsidiansoft/feathers-hooks-validate-joi
v3.0.0
Published
Feathers hook utility for schema validation, sanitization and client notification using Joi.
Downloads
3
Readme
feathers-hooks-validate-joi
Feathers hook utility for schema validation and sanitization using Joi. Joi error messages are converted to web/mobile friendly formats, and optionally translated for clarity or internationalization.
Code Example
const Joi = require('joi');
const validate = require('feathers-hooks-validate-joi');
const name = Joi.string().trim().min(5).max(30)
.regex(/^[\sa-zA-Z0-9]$/, 'letters, numbers and spaces').required();
const password = Joi.string().trim().min(2).max(30).required();
const schema = Joi.object().keys({
name: name,
password,
confirmPassword: password.label('Confirm password'),
});
const joiOptions = { convert: true, abortEarly: false };
(1) Validate sanitize data. The client receives any errors in a format suitable for forms which also seems to be recommend by Feathers.
export.before = {
create: [ validate.form(schema, joiOptions) ],
update: [ validate.form(schema, joiOptions) ],
patch: [ validate.form(schema, joiOptions) ]
};
(2) Errors are returned in a Mongoose format.
export.before = {
create: [ validate.mongoose(schema, joiOptions) ],
update: [ validate.mongoose(schema, joiOptions) ],
patch: [ validate.mongoose(schema, joiOptions) ]
};
(3) Internationalize or clarify Joi error messages.
function i18n(str) { return str; } // internationalization
const translations = {
'string.min': () => i18n('"${key}" must be ${limit} or more chars.'),
'string.regex.base': (context) => {
switch (context.pattern.toString()) {
case /^[\sa-zA-Z0-9]{5,30}$/.toString():
return i18n('"${key}" must consist of letters, digits or spaces.');
}
}
};
export.before = {
create: [ validate.mongoose(schema, joiOptions, translations) ],
update: [ validate.mongoose(schema, joiOptions, translations) ],
patch: [ validate.mongoose(schema, joiOptions, translations) ]
};
Note: Data values in the $set
operator are not validated.
You could use joi-errors-for-forms
for that.
Motivation
Data must be validated and sanitized before the database is changed. The client must be informed of any errors using a schema friendly to web/mobile apps.
This repo helps implement this in Feathers CRUD hooks.
Installation
Install Nodejs.
Run npm install feathers-hooks-validate-joi --save
in your project folder.
You can then require the utilities.
API Reference
To do.
Tests
npm test
to run tests.
npm run cover
to run tests plus coverage.
A Note on Internationalization
The options
in Joi.validate(value, schema, options, cb)
supports a
language
option
with which you can change
Joi error messages
in bulk.
You can then internationalize your field names and regex descriptions in the schema, e.g.
Joi.string().regex(/^[\sa-zA-Z0-9]$/, i18n('letters, number and spaces')).label(i18n('Confirm password'))
These are suitable methods to internationalize the majority of Joi error messages.
Contributors
License
MIT. See LICENSE.