[![npm version](https://badge.fury.io/js/express-queue.svg)](http://badge.fury.io/js/express-queue) [![Build Status](https://travis-ci.org/alykoshin/express-queue.svg)](https://travis-ci.org/alykoshin/express-queue) [![Coverage Status](https://coveralls.io/repos/alykoshin/express-queue/badge.svg?branch=master&service=github)](https://coveralls.io/github/alykoshin/express-queue?branch=master) [![Code Climate](https://codeclimate.com/github/alykoshin/express-queue/badges/gpa.svg)](https://codeclimate.com/github/alykoshin/express-queue) [![Inch CI](https://inch-ci.org/github/alykoshin/express-queue.svg?branch=master)](https://inch-ci.org/github/alykoshin/express-queue) [![Dependency Status](https://david-dm.org/alykoshin/express-queue/status.svg)](https://david-dm.org/alykoshin/express-queue#info=dependencies) [![devDependency Status](https://david-dm.org/alykoshin/express-queue/dev-status.svg)](https://david-dm.org/alykoshin/express-queue#info=devDependencies) [![Known Vulnerabilities](https://snyk.io/test/github/alykoshin/express-queue/badge.svg)](https://snyk.io/test/github/alykoshin/express-queue) # express-queue 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](https://github.com/alykoshin/express-queue/issues). ## Installation ```sh npm install --save express-queue ``` ## Usage ```js 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: ```js 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](https://www.npmjs.com/package/mini-queue) package docs and/or [source code](https://github.com/alykoshin/mini-queue). ## Reject handler 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.: ```js const queueMw = expressQueue({ activeLimit: 2, queuedLimit: 6, rejectHandler: (req, res) => { res.sendStatus(500); } }); ``` ## Example Please, refer to `./examples/` directory for a working example. ## Credits [Alexander](https://github.com/alykoshin/) # Links to package pages: [github.com](https://github.com/alykoshin/express-queue)   [npmjs.com](https://www.npmjs.com/package/express-queue)   [travis-ci.org](https://travis-ci.org/alykoshin/express-queue)   [coveralls.io](https://coveralls.io/github/alykoshin/express-queue)   [inch-ci.org](https://inch-ci.org/github/alykoshin/express-queue) ## License MIT