У меня есть сайт, созданный с помощью 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) => {
...
})