apichainer
v1.1.2
Published
A flexible Express middleware chaining library for Node.js, providing validation, authentication, logging, and parallel execution with CORS support.
Maintainers
Readme
apichainer
apichainer is a Node.js package for providing an Express middleware chaining library that supports JSON schema validation, authentication, logging, CORS, and parallel execution with customizable options.
Installation
This is a Node.js module available through the npm registry. Installation is done using the npm install command:
$ npm install apichainer
```
## Usage
### Simple Usage (Enable Validation and CORS)
#### Chain middleware for an Express route with validation and CORS support:
```javascript
var express = require('express');
var APIChainer = require('apichainer');
var app = express();
app.use(express.json());
var chain = new APIChainer()
.cors()
.validate({
type: 'object',
properties: { name: { type: 'string' } },
required: ['name'],
})
.use(function (req, res, next) {
res.json({ msg: 'This is CORS-enabled with validation!' });
});
app.post('/api', function (req, res) {
chain.execute(req, res);
});
app.listen(3000, function () {
console.log('Server listening on port 3000');
});Enable Middleware for a Single Route
Apply authentication and validation to a specific route:
var express = require('express');
var APIChainer = require('apichainer');
var app = express();
app.use(express.json());
var chain = new APIChainer()
.auth({ token: 'secret' })
.validate({
type: 'object',
properties: { name: { type: 'string' } },
required: ['name'],
})
.use(function (req, res, next) {
res.json({ msg: 'This is authenticated and validated for a single route' });
});
app.post('/api', function (req, res) {
chain.execute(req, res);
});
app.listen(3000, function () {
console.log('Server listening on port 3000');
});Enabling Parallel Execution
Run middleware concurrently for improved performance:
var express = require('express');
var APIChainer = require('apichainer');
var app = express();
app.use(express.json());
var chain = new APIChainer({}, true) // Enable parallel execution
.log({ level: 'info' })
.cors()
.use(function (req, res, next) {
// Simulate async task
setTimeout(function () {
res.json({ msg: 'Parallel execution completed' });
}, 1000);
});
app.get('/api', function (req, res) {
chain.execute(req, res);
});
app.listen(3000, function () {
console.log('Server listening on port 3000');
});Configuration Options
validate(schema):- Validates
req.bodyagainst a JSON Schema. - Returns
<property> is requiredfor missing or invalid required properties. - Example:
{ type: 'object', properties: { name: { type: 'string' } }, required: ['name'] }
- Validates
validate(schema):- Adds token-based authentication.
- Options:
- Options:
- Options:
token: Required string (e.g.,secret).header: Optional string (e.g.,authorization, defaults toauthorization).
auth(options):- Adds token-based authentication
Options
token: Required string (e.g.,secret)header: Optional string (e.g.,authorization, default toauthorization).
log(options):- Logs request details (method, URL, timestamp).
Options
level:info,warn, orerror(default toinfo).
parallel:- Enable parallel middleware execution by setting
parallel: truein the constructor. - Example:
new APIChainer({},true)
- Enable parallel middleware execution by setting
The default configuration is the equivalent of:
Demo
A demo illustrating apichainer usage with Express is available in the repository:
$ git clone https://github.com/vivek3410/apichainer
$ cd apichainer
$ npm install
$ node examples/express-example.jsTest with curl:
$ curl -X POST http://localhost:3000/api \
-H "Content-Type: application/json" \
-H "Authorization: Bearer secret" \
-d '{"name":"John"}'Expected response:
{ "msg": "This is CORS-enabled with validation!" }