Как установить ограничение скорости с express роутером - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть сайт, созданный с помощью React, пользователи которого должны будут заполнить форму и нажать кнопку отправки. Затем входные данные формы будут храниться в нашей базе данных (mongoDB). Однако одна из распространенных проблем заключается в том, что если пользователь нажимает кнопку отправки несколько раз, информация будет отправляться в базу данных несколько раз. Я пытаюсь установить лимит на маршруте, где информация публикуется в БД.

Я пытался использовать express -rate-limit и удалить express .router (только что использовал app = express ()), но, похоже, он не работает. Я установил ограничение на 1 запрос в течение минуты, но когда я дважды щелкну на кнопку отправить, моя информация все равно будет дважды опубликована в БД

Это мой код на внешнем интерфейсе для загрузки в базу данных

uploadDatabaseHandler = async() =>{
    await axios.post("http://localhost:8000/users", this.state).then(() => {
      console.log("Client: Uploaded user information to Database")
    }).catch(error => {
      console.log(error)
    })
  }

Это мой код на заднем конце. В идеале, если бы я хотел придерживаться маршрутизатора express, но как мне реализовать ограничитель?

const express = require('express');
const router = new express.Router();

router.post('/users', (req,res) => {
   ...
})

Именно это я и попробовал, когда убрал роутер. Но все равно не сработало.

const app = express();

const limiter = rateLimit({
  windowMs: 1 * 60 * 1000, // 15 minutes
  max: 1 // limit each IP to 1 requests per windowMs
});

//  apply to all requests
app.use(limiter);

app.post('/users', (req,res) => {
   ...
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...