middlewares/validator.js
var _ = require('lodash');
var validator = require('validator');
var expressValidator = require('express-validator');
/**
* 自定义验证
*/
module.exports = function () {
return expressValidator({
errorFormatter: function (param, message, value) {
return {
param: param,
message: message,
value: value
};
},
customValidators: {
isString: function (value) { return _.isString(value); },
isEmail: function (value) { return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value); },
isNumber: function (value) { return _.isNumber(value); },
isObject: function (value) { return _.isObject(value); },
isArray: function (value) { return _.isArray(value); },
inArray: function (param) {
var argumentsArray = [].slice.apply(arguments);
var validatorName = argumentsArray[1];
return _.every(param, function (item) {
var validatorOptions = _.tail(argumentsArray);
validatorOptions.unshift(item);
switch(validatorOptions[1]) {
case 'isString': return _.isString(item);
case 'isEmail': return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(item);
case 'isNumber': return _.isNumber(item);
case 'isObject': return _.isObject(item);
case 'isArray': return _.isArray(item);
case 'isBoolean':
switch (typeof item) {
case 'string': return item === 'true' || item === 'false';
case 'boolean': return item === true || item === false;
default: return false;
}
break;
default:
return validator[validatorName].apply(this, validatorOptions);
}
});
},
isBoolean: function (value) {
switch (typeof value) {
case 'string':
return value === 'true' || value === 'false';
case 'boolean':
return value === true || value === false;
default:
return false;
}
},
custom: function (value, callback) {
if (typeof value !== 'undefined') {
return callback(value);
} else {
return false;
}
}
}
});
};