brave/joi

Name: joi

Owner: Brave Software

Description: Object schema validation

Created: 2015-11-18 18:14:47.0

Updated: 2017-04-26 15:40:29.0

Pushed: 2018-02-20 20:00:04.0

Homepage: null

Size: 2014

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

joi Logo

Object schema description language and validator for JavaScript objects.

npm version Build Status Dependencies Status DevDependencies Status

Join the chat at https://gitter.im/hapijs/joi

Lead Maintainer: Nicolas Morel

Example

Joi = require('joi');

schema = Joi.object().keys({
username: Joi.string().alphanum().min(3).max(30).required(),
password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
access_token: [Joi.string(), Joi.number()],
birthyear: Joi.number().integer().min(1900).max(2013),
email: Joi.string().email()
ith('username', 'birthyear').without('password', 'access_token');

validate({ username: 'abc', birthyear: 1994 }, schema, function (err, value) { });  // err === null -> valid

The above schema defines the following constraints:

Usage

Usage is a two steps process. First, a schema is constructed using the provided types and constraints:

schema = {
a: Joi.string()

Note that joi schema objects are immutable which means every additional rule added (e.g. .min(5)) will return a new schema object.

Then the value is validated against the schema:

validate({ a: 'a string' }, schema, function (err, value) { });

If the value is valid, null is returned, otherwise an Error object.

The schema can be a plain JavaScript object where every key is assigned a joi type, or it can be a joi type directly:

schema = Joi.string().min(10);

If the schema is a joi type, the schema.validate(value, callback) can be called directly on the type. When passing a non-type schema object, the module converts it internally to an object() type equivalent to:

schema = Joi.object().keys({
a: Joi.string()

When validating a schema:

API

See the API Reference.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.