README
express-request-checker
Create request checker middleware for Express.
with express-request-checker, checking HTTP request's query, body or url params will be more easy and readable. All the works is just require express-request-checker in router.js which belongs to an Express project and config it. So it's no need to modify any other source file.
Since validation codes are written in a config-like way, router.js file will look like an API document, I hope that the communication cost within the development team can be reduced.
- No validation codes.
router.jsis also an API document.- Easy to combine with other validation package.
Quick Example(Javascript):
// router.js
var express = require('express');
var reqCheckerModule = require('express-request-checker');
var reqChecker = reqCheckerModule.requestChecker;
var router = express.Router();
var options = {
strict: false, // Allow unexpected parameter. (true|false, DEFAULT: true)
query: { // Check req.query. (params|query|body)
'param1': {
matchRegExp: /^[0-9]{1}$/
},
'param2': {
isIn: [1, 2, 3],
isOptional: true // Optional parameter. (true|false, DEFAULT: false)
}
}
};
router.get('/path', reqChecker(options), handlerFunction);
module.exports = router;
Quick Example(CoffeeScript):
# router.coffee
express = require 'express'
reqCheckerModule = require 'express-request-checker'
reqChecker = reqCheckerModule.requestChecker
router = express.Router()
options =
strict: false # Allow unexpected parameter. (true|false, DEFAULT: true)
query: # Check req.query. (params|query|body)
'param1':
matchRegExp: /^[0-9]{1}$/
'param2':
isIn: [1, 2, 3]
isOptional: true # Optional parameter. (true|false, DEFAULT: false)
router.get '/path', reqChecker(options), handlerFunction
module.exports = router
Play with other modules
// router.js
var express = require('express');
var reqCheckerModule = require('express-request-checker');
var reqChecker = reqCheckerModule.requestChecker;
var router = express.Router();
var validator = require('validator');
var options = {
params: {
'id': {
assertTrue: validator.isInt
}
},
body: {
'email': {
assertTrue: validator.isEmail
},
'jsonData': {
assertTrue: validator.isJSON
}
}
};
router.post('/user/:id', reqChecker(options), handlerFunction);
module.exports = router;
Checker Options Default Values
| Option | Default Value |
|---|---|
| strict | true |
Parameter Options Default Values
| Option | Default Value |
|---|---|
| isOptional | false |
| assertTrue | [] |
| assertFalse | [] |
| matchRegExp | [] |
| isIn | [] |
| notIn | [] |
| isInteger | null |
| isEmail | null |
| isArray | null |
| isIntegerArray | null |
| equal | null |
| greaterThan | null |
| greaterEqual | null |
| lessThan | null |
| lessEqual | null |
| allowEmpty | false |
| minLength | null |
| maxLangth | null |
Parameter Options
assertTrue
function, [function, function ...] or []. (DEFAULT: [] - No checker)
Using parameter in request as function(s)'s argument, if the function(s) return true,OK. Otherwise, NG.
Example:
option = {
query: {
param1: {
assertTrue: [function(value) { return value > 10; }]
}
}
}
assertFalse
Opposite to assertTrue.
matchRegExp
RegExp, [RegExp, RegExp ...] or []. (DEFAULT: [] - Don't check)
If the RegExp(s) test result is true, OK. Otherwise, NG.
Example:
option = {
query: {
param1: {
matchRegExp: [/^[012]{1}$/, /^[234]{1}$/]
}
}
}
isIn
[value, value, ...] or []. (DEFAULT: [] - Don't check)
Values of parameter in request which are allowed.
Example:
option = {
query: {
param1: {
isIn: [1, 2, 3]
}
}
}
notIn
Opposite to isIn.
isInteger
true or false. (DEFALT:null - Don't care)
when true, The value of parameter in request must be an integer.
when false , The value of parameter in request must NOT be an integer.
Example:
option = {
query: {
param1: {
isInteger: true
}
}
}
isEmail
true or false. (DEFALT:null - Don't care)
when true, The value of parameter in request must be an correct email address.
when false , The value of parameter in request must NOT be an email address.
Example:
option = {
query: {
param1: {
isEmail: true
}
}
}
isArray
true or false. (DEFALT:null - Don't care)
when true, The value of parameter in request must be an Array or stringified Array.
when false , The value of parameter in request must NOT be an Array or stringified Array.
Example:
option = {
query: {
param1: {
isArray: true
}
}
}
isIntegerArray
true or false. (DEFALT:null - Don't care)
when true, The value of parameter in request must be an Array or stringified Array whose elements are all integers.
when false , The value of parameter in request must NOT be an Array or stringified Array whose elements are all integers.
Example:
option = {
query: {
param1: {
isIntegerArray: true
}
}
}
equal / greaterThan / greaterEqual / lessThan / lessEqual
integer or null. (DEFALT:null - Don't care)
The value of parameter in request must be equal/greaterThan/greaterEqual/lessThan/lessEqual to the option value.
Example:
option = {
query: {
param1: {
equal: 100
}
}
}
allowEmpty
true or false. (DEFAULT: false)
when setted true, The value of parameter in request can be ''.
when setted true, The value of parameter in request can NOT be ''.
Example:
option = {
query: {
param1: {
isEmpty: false
}
}
}
maxLength / minLength
integer or null. (DEFALT:null - Don't care)
Max/Min Length of the value of parameter in request.
Example:
option = {
query: {
param1: {
minLength: 5,
maxLength: 10
}
}
}
Install:
npm install express-request-checker
Test:
cd node_modules/express-request-checker
npm test