Barebones schema validation library for things such as database schemas, api data schemas, etc.
$ npm install schema-validator
For browsers, download and include the script validator.js
just as you would jquery or another script.
Object.prototype.toString.call
so make sure you use String
, Number
, Boolean
... etc.You create a JSON Schema, where username
is a field, and each key:value inside of it is an implementation in validator.
var schema = {
username: {
type: String,
required: true,
length: {
min: 3,
max: 36
},
test: /^[a-z0-9]+$/gi
}
};
Setup a new Validator
against your schema:
var validator = new Validator(schema);
Note there is also debugging support you can enable by adding the following line:
validator.debug = true;
Now we validate against some given information:
var check = validator.check({
username: "Niji%kokun"
});
console.log(check);
Nesting is supported, it's currently in a testing phase, as seen in the test file:
belt: {
type: Object,
required: true,
team: {
type: Array,
required: true,
length: {
min: 1,
max: 6
}
},
inventory: {
type: Array,
default: [],
length: {
max: 255
}
}
}
Schema data will be put on the request object, req.validated
, as an Object
containing field : data information.
app.get('api/user/add', [ new Validator(schema.user, true) ], function (req, res) {
res.send(200, req.validated);
});
or
app.get('api/user/add', [ (new Validator(schema.user)).middleware() ], function (req, res) {
res.send(200, req.validated);
});
Implementing a feature into Validator is easy, you set the field and a callback.
The callback supports a single argument options
which contains valuable information.
field
- The field implementation that is being checked.key
- The schema field being checked.data
- The data passed from an external source.value
- The field implementation data value.error
- Sugar method for this.error
which was previously used.
type
- optional argument, it's the error field for the message given. Default is field
.message
- Error message.Validator.implement("field", function (options) {
if (options.data) {
options.error("Data exists, this is wrong... or right! I don't know!");
}
// If you couldn't tell this gives an error back to the validator
options.error("No check has been done against this key!");
// and you can set custom field name for the error message object
options.error("error-field", "This field hasn't been checked yet!");
});
After your implementation has been ran, the validator will check for errors, if found it will exit out and return the errors. You can pass along multiple errors per run, for an example check the test implementation.
Version 3.3.0
.check
.middleware
to be invoked when used instead of referenced.Version 3.2.2
nesting
abilities.
Version 3.2.1
default
field.
required
fields, may be subject to change. Let me know in issues how you feel.Version 3.2.0
Function
, String
... are supported, check password.type in test for more information.debug
feature for showing value of fields along with error messages.Version 3.1.0
Version 3.0.0
.implement
methodVersion 2.0.0
Version 1.0.0