Joi based validation middleware for ExpressJS
npm install @akrdevtech/lib-express-joi-validation-middleware- Example Usage (TypeScript)
- Example Usage (JavaScript)
- Behaviours
- Validation Ordering
- Validation Options
sh
npm i @akrdevtech/lib-express-joi-validation-middleware
`
Peer Dependency
`sh
npm i express
`
$3
Validate
body,query,cookies,headers¶ms at once using . Each of these may be optional as well.
`js script
import * as Joi from 'joi'
import * as express from 'express'
import { RequestValidator } from '@akrdevtech/lib-express-joi-validation-middleware';
const { validateAll } = new RequestValidator({ abortEarly: false }); // parameters of constructor is optionalconst app = express()
const validateAllSchema: IValidateAllSchema = {
body: Joi.object({
someField: Joi.string().min(3).required(),
}),
query: Joi.object({
someField: Joi.string().min(3).required(),
}),
cookies: Joi.object({
someField: Joi.string().min(3).required(),
}),
headers: Joi.object({
someField: Joi.string().min(3).required(),
}),
params: Joi.object({
someField: Joi.string().min(3).required(),
}),
}
app.get('/', [
validateAll(validateAllSchema),
(req, res) => { res.send(
Hello World!) }
]);// with joi validation options
app.get('/with-joi-validation-option', [
validateAll(validateAllSchema,{ allowUnknown:true }),
(req, res) => { res.send(
Hello World!) }
]);const port = 8000;
app.listen(port, () => {console.log(
⚡️ Service started : PORT → ${port}});
`
$3
`js script
const Joi = require('joi')
const app = require('express')()
const { RequestValidator } = require('@akrdevtech/lib-express-joi-validation-middleware');const {
validateAll,
validateBody,
validateCookies,
validateHeaders,
validateQuery,
validateParams
} = RequestValidator;
const validateAllSchema: IValidateAllSchema = {
body: Joi.object({
someField: Joi.string().min(3).required(),
}),
query: Joi.object({
someField: Joi.string().min(3).required(),
}),
cookies: Joi.object({
someField: Joi.string().min(3).required(),
}),
headers: Joi.object({
someField: Joi.string().min(3).required(),
}),
params: Joi.object({
someField: Joi.string().min(3).required(),
}),
}
const headerSchema = Joi.object({ someField: Joi.string().required() });
const bodySchema = Joi.object({ someField: Joi.string().required() });
const querySchema= Joi.object({ someField: Joi.string().required() });
const cookieSchema= Joi.object({ someField: Joi.string().required() });
const paramSchema= Joi.object({ someField: Joi.string().required() });
app.get('/', [
validateAll(validateAllSchema),
(req, res) => { res.send(
Hello World!) }
]);app.get('/separately', [
validateQuery(querySchema),
validateBody(bodySchema),
validateCookies(cookieSchema),
validateHeaders(headerSchema),
validateParams(paramSchema),
(req, res) => { res.send(
Hello World!) }
]);const port = 8000;
app.listen(port, () => {console.log(
⚡️ Service started : PORT → ${port}});
`
[](https://www.npmjs.com/package/@akrdevtech/lib-express-joi-validation-middleware#Behaviours)Behaviours
$3
Validation can be performed in a specific order using standard express middleware behaviour. Pass the middleware in the desired order.
Here's an example where the order is headers, body, query:
`js script
const headerSchema = Joi.object({ someField: Joi.string().required() });
const bodySchema = Joi.object({ someField: Joi.string().required() });
const querySchema= Joi.object({ someField: Joi.string().required() });route.get('/', [
validateHeaders(headerSchema),
validateBody(bodySchema),
validateQuery(querySchema),
routeHandler
]);
`$3
Validation options can be extented with Joi.ValidationOptions.Here’s an example where the order is headers, body, query:
`js script
const bodySchema = Joi.object({ someField: Joi.string().required() });const options = {
abortEarly: false,
allowUnknown: true,
}
route.get('/', [
validateBody(bodySchema, options),
routeHandler
]);
``