Express middleware to limit a number of simultaneously processing requests using queue
If you have different needs regarding the functionality, please add a feature request.
npm install --save express-queue
var express = require('express');
var queue = require('express-queue');
var app = express();
// Using queue middleware
app.use(queue({ activeLimit: 2, queuedLimit: -1 }));
// activeLimit - max request to process simultaneously
// queuedLimit - max requests in queue until reject (-1 means do not reject)
// rejectHandler - handler to call when queuedLimit is reached (see below)
//
// May be also:
// app.get('/api', queue({ activeLimit: 2, queuedLimit: -1})
You can access MiniQueue object used internally. To get current queue length you may do following:
const express = require('express');
const expressQueue = require('../');
const queueMw = expressQueue({ activeLimit: 2, queuedLimit: -1 });
const app = express();
app.use(queueMw);
console.log(`queueLength: ${queueMw.queue.getLength()}`);
For more info on Queue object used refer to npmjs.com/package/mini-queue package docs and/or source code.
If you set queuedLimit, when the queue is full, the middleware will reject any incoming request.
The default handler will send a 503 status code, but you can setup your own handler with rejectHandler
option, e.g.:
const queueMw = expressQueue({ activeLimit: 2, queuedLimit: 6, rejectHandler: (req, res) => { res.sendStatus(500); } });
Please, refer to ./examples/
directory for a working example.
github.com npmjs.com travis-ci.org coveralls.io inch-ci.org
MIT