alykoshin/express-queue

View on GitHub
README.md

Summary

Maintainability
Test Coverage
[![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