simplest-param-validator v1.0.4
simplest-param-validator
Extremely simple, lightweight and superfast express middleware for strictly verifying the presence of various parameters
Prerequisites
This middleware uses ES6 features. Make sure your Node.js version fully supports ES6
Quick start
First, run npm install simplest-param-validator --save for your app. Then, in an Express app, you may use it by calling the checkParams function. It checks the req.query,req.body and req.params for the presence of desired inputs and strictly checks their value for null, undefined and empty strings.:
const express = require('express')
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
const paramValidator = require('simplest-param-validator')
/* The code of this route strictly requires title, author, email in body parameters (req.body).
So you can use this middleware to verify that all these parameters are available
in express route and their values are not null, undefined or empty string
*/
app.post('/',paramValidator.checkParams("body","title","author","email"),(req,res)=>{
if(req.paramsMismatch!=true){
//execute the code of your function
}
else{
// send a response that there is a mismatch in the parameters required by the API.
res.send({"expected":req.paramsExpected,"received":req.paramsReceived})
}
});The function simply takes first input as the type of the parameter you are trying to verify for which the possible values are - route, query and body and then you are supposed to pass the names of the parameters as comma separated values.
Since its a middleware, the error can be simply captured by checking the request variable paramsMismatch. If its true, that means your route didn't get the parameters that you were looking for. You may also use req.paramsExpected and req.paramsReceived which are also set by this middleware to show the users what parameters they missed.
For example, If you want to ensure that your route is getting query parameters named page and skip an
/* The code of this route strictly requires page and skip in query parameters (req.query).
*/
app.get('/',paramValidator.checkParams("query","page","skip"),(req,res)=>{
if(req.paramsMismatch!=true){
//execute the code of your function
}
else{
// send a response that there is a mismatch in the parameters required by the API.
res.send({"expected":req.paramsExpected,"received":req.paramsReceived})
}
});
/* The code of this route strictly requires id in route parameters (req.params).
*/
app.get('/',paramValidator.checkParams("route","id"),(req,res)=>{
if(req.paramsMismatch!=true){
//execute the code of your function
}
else{
// send a response that there is a mismatch in the parameters required by the API.
res.send({"expected":req.paramsExpected,"received":req.paramsReceived})
}
});
// ...Use with Restify
You may use it with Restify as well. Since Restify categorises all kinds of input in req.params only, you will have to pass the type as route and that will do the trick for you.
Important note
You may validate any number of parameters but please make sure that the first argument to the function is always the type of parameter you are trying to validate. The possible values are route, query and body only!
Limitation
While using with ExpressJS, you can use this middeware to validate only one type of parameter at a time.Chaining this middleware to detect multiple types in a single route may give wrong results in some cases. Version 2.x of this middleware will not have this limitation.
This limitation is not there while using with Restify as all the parameters are there in req.params only.
License
This project is licensed under the MIT License - see the LICENSE file for details