86 lines
3.3 KiB
Markdown
86 lines
3.3 KiB
Markdown
[![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
|