express-joi-model
v1.3.1
Published
A middleware for validating express inputs using Joi schemas using classes
Downloads
12
Maintainers
Readme
express-joi-model
A middleware for validating express inputs using Joi schemas using classes. Features include:
- Classes for validating input and output
- Replaces the incoming
req.body
,req.query
, etc and with the validated result object with specified class - Retains the original
req.body
inside a new property namedreq.original-body
.
Install
You need to install joi
with this module since it relies on it in
peerDependencies
.
npm i express-joi-model joi --save
Example
A JavaScript example can be found in the example/
folder of this repository.
Usage (JavaScript)
const express = require('express')
const { BaseModel, putValidationMiddleware } = require('express-joi-model')
const Joi = require('joi')
const app = express()
class RequestModel extends BaseModel {
static get __schema() {
return {
a: Joi.number(),
b: Joi.string()
}
}
}
app.use(express.json())
app.post('/', putValidationMiddleware({ body: RequestModel }), function (req, res) {
console.log(req.body)
return res.json({ res: true })
})
app.listen(8080)
API
The library exports 3 variables - ValidationError
, BaseModel
, putValidationMiddleware
.
ValidationError
- the error thrown when validation of the object failsBaseModel
- the base class to inherit from when making your own model.putValidationMiddleware
- the function to generate the middleware using a config.
ValidationError
class ValidationError extends Error
It contains the error string
BaseModel
class BaseModel extends Object
The BaseModel class is to be used to create your own models. The class must have a static __schema
property that must be overriden and must return an Object
contains the appropriate keys and apt Joi
values.
Eg:
class RequestModel extends BaseModel {
static get __schema() {
return {
res: Joi.boolean(),
}
}
}
const resObj = RequestModel({res: true}) // VALID
const resObj2 = RequestModel({res: "123"}) // INVALID: throws ValidationError
This ensures that the object passed to RequestModel
class will follow the schema.
putValidationMiddleware
function putValidationMiddleware(cfg): function baseModelValidation(req, res, next)
Config can only have 4 keys that define what part of request has to be validated. The values have to be classes inherited from BaseModel:
body
-> validatesreq.body
and stores the validated object inreq.body
and the original body inreq.original_body
query
-> validatesreq.query
and stores the validated object inreq.query
and the original body inreq.query
params
-> validatesreq.params
and stores the validated object inreq.params
and the original body inreq.original_params
response
-> validates the response post return. The response has to be a json object. Returns 500 if response schema doesn't validate. The input validations return 400 if the input isn't valid.
Eg:
app.post('/correct', putValidationMiddleware({ body: RequestModel, response: ResponseModel }), function (req, res) {
console.log(req.body)
return res.json({ res: true })
})
Future TODO
- Better error handling + modification capabilities
- Better configurabilty for Joi in request and response