node-duplicate-req
Version:
A lightweight request duplicate check for api side.
56 lines (47 loc) • 2.57 kB
Markdown
Node Duplicate Req
==================
A lightweight api side duplicate check
Installation
--------------
```npm install node-duplicate-req```
Requirements
--------------
In order for it to work it must be placed after request body parser.
Redis must be installed
Usage
-----
First require package and instantiate it with redisClient
```javascript
var dupCheck = require('node-duplicate-req')( redisClient );
```
You can also pass in an options object at instantiation for shared options between all middleware.
**NOTE:** if no options are passed defaults will be used.
```javascript
var dupCheck = require('node-duplicate-req')( redisClient, { keyProperty: 'req.user.id', ttl: 30 } );
```
Then create the middleware you want to use, here you can also pass in an options object that will only be used for this specific endpoint.
```javascript
var userDupCheckMiddleware = dupCheck.middleware( { prefix: 'users-', ignoreProperties: [ 'user.age', 'user.notes'] } );
var users = require('../controllers/users');
server.post( '/users', dupCheckMiddleware, users.create );
```
Or create middleware without options, Defaults are at the bottom of the readme
```javascript
var dupCheckMiddleware = dupCheck.middleware();
```
Optional (Custom Request Override Header):
- 'x-override-dupcheck' : if on the request object, will override the function, allowing the request to skip the duplicate checking process all together
options
---------
| Property | DataType | Default | Description |
|----------|----------|---------|-------------|
| ttl | Number | 60 | How many seconds you want it to live in the redis database |
| keyValue | String | req.authorization.credentials + method and route| The key to save in the redis database |
| prefix | String | '' | prefix to be included with each redis entry |
| ignoreEmptyBody | Boolean | true | When set to true it does not save empty object in redis database |
| ignoreProperties | Array | [] | Properties you want ignored from req object, default empty array. Give absolute path to property |
| infoLogFunc | Function | null | Function to handle your info logs |
| errorLogFunc | Function | null | Function to handle your error logs |
| ovrLogFunc | Function | null | Function to handle your logs when the request is overridden by a header |
| customDupMsg | String | "Duplicate request detected" | Custom string message to be sent back in the response for duplicates |
| customErrMsg | String | "Internal server error has occurred" | Custom string message to be sent back in the response for errors |