Skip to content

Express middleware to avoid duplicates requests made by client

License

Notifications You must be signed in to change notification settings

bombkiml/express-duplicate-request

Repository files navigation

express-duplicate-request

This middleware to Limit each IP duplicated requests per window made the client, due to lack of network, or nervous and frustrated endless cliking.

Inspiration from romch007 duplicate-requests

Install

$ npm install express-duplicate-request
# OR
$ yarn add express-duplicate-request

Usage

import { duplicateRequest } from "express-duplicate-request";
// OR
const { duplicateRequest } = require("express-duplicate-request");

const express = require("express");
const app = express();

const myDup = duplicateRequest({
  expiration: 500, // Can't duplicate request for 5 milliseconds each IP requests per `window`
});

// Apply the duplicate request middleware to all requests.
app.use(myDup);

app.get("/", (req, res) => res.end("Hey!"));

app.listen(9000, () => console.log("Listening!"));

Options

{
  expiration: 500 , /* Expiration time of the request in memory
                     * should be Number [1000 = 1 seconds]
                     */

  property: "id",   /* Property which contains the id
                     * should be a string or a function 
                     * with a req paramater which returns a string
                     */

  prefix: "article.add", // Prefix to group requests in storage

  errorHandling: {
    statusCode: 429, // The status code to send if request is duplicated
    json: {} // Javascript plain object to send if request is duplicated
  },

  connectionUri: "" // Leave empty to store object in memory, or use redis:// or mongodb://
}

Specific your Endpoint

// Declare Specific 1
const specificDup1 = duplicateRequest({
  expiration: 500, // Can't duplicate request for 5 milliseconds
});

// Declare Specific 1
const specificDup2 = duplicateRequest({
  expiration: 1000, // Can't duplicate request for 1 seconds
});

app.get("/", specificSlow1, (req, res) => res.end("Hey! 5 milliseconds"));
app.get("/", specificSlow2, (req, res) => res.end("Hey! 1 seconds"))

About

Express middleware to avoid duplicates requests made by client

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published