input-filter-async
v0.0.0
Published
A high-level library for filtering (sanitisation) and validating input data
Downloads
17
Readme
Asynchronous input filter
A high-level library for filtering (sanitization) and validating input data
Installation
npm install input-filter-async
Usage
Basic usage
NOTE:
- if
required: true
is NOT specified, value is considered optional - value is pre filtered regardless whether it's mandatory or optional, if value is not given
null
is placed instead - if value is optional but given then it's validated
- finally if value passed validation then it's post filtered
Basic validation and sanitization is build upon node-validator library by Chris O'Hara
var InputFilter = require('input-filter-async');
var rules = {
'name': {
'required': true,
'preFilters': [
'trim',
],
},
'age': {
'required': false, // also FALSE if absent
'preFilters': [
'trim',
],
'validators': [
'isInt',
],
'postFilters': [
'toInt',
],
},
};
var data = {
name: " dV ",
age: ' 29 ',
};
var inputFilter = new InputFilter(rules);
inputFilter.isValid(data, function(isValid) {
if (isValid) {
console.log(this.getValues()); // { name: 'dV', age: 29 }
console.log(this.getValue('age')); // 29
} else {
console.log(this.getErrors());
/*
{
name: 'Value is required and can't be empty',
age: 'Invalid integer'
}
*/
}
});
Writing you own filters and validators.
NOTE:
- filters work in synchronous way while validators are expected to be asynchronous
var _ = require('underscore');
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if (err)
throw err;
var usersCol = db.collection('users');
var InputFilter = require('input-filter-async');
var rules = {
name: {
required: true,
preFilters: [
'trim',
function(value) {
if (_.isString(value)) {
value = value.toLowerCase();
}
return value;
},
],
validators: [
function(value, params, callback) {
// params — passed data
var query = {name: value};
usersCol.findOne(query, function(err, doc) {
if (err)
throw err;
if (doc) {
var message = 'User "' + value + '" already exists';
callback(message);
} else {
callback(null);
}
});
},
],
},
};
var data = {
name: " JOHN SMITH ",
};
var inputFilter = new InputFilter(rules);
inputFilter.isValid(data, function(isValid) {
if (isValid) {
// { name: 'john smith' }
console.log(this.getValues());
} else {
// { name: 'User "john smith" already exists' }
console.log(this.getErrors());
}
});
});