предотвращение отправки нескольких http-запросов с помощью выборки

#javascript #jquery #node.js #dom #fetch

#javascript #jquery #node.js #dom #выборка

Вопрос:

Я создаю расширение Chrome, в котором я принимаю входные данные с помощью prompt и отправляю их на сервер с помощью HTTP-запроса. Делая это, я сталкиваюсь с дублированием данных, что означает, что расширение отправляет несколько запросов на сервер, что я хочу предотвратить. (Примечание: принимая данные из запроса только один раз, он отправляет несколько запросов одних и тех же данных)

Пример кода: интерфейс:

 var data = prompt("Enter your data here");
if (data !== null || data !== ''){
fetch('http://localhost:3000/post', {
  method: 'POST',
  body: JSON.stringify({
    data: data
  }),
  headers: {
    'Content-Type': 'application/json',
  }
}).then((res) => {
  console.log("wait for whole req");
  return res.json();
}).then((resData) => {
  console.log(resData);
  console.log("req send successfully");
  // note = null;
}).catch((error) => {
  // note = null;
  console.log(error.message);
  // alert(error.message);
});
 

Серверная часть:

 app.post("/post", function(req, res) {
    const data = req.body.data;
    dataList.push(data);
    res.status(200).json({
       status: "uploaded"
    });
});
 

Здесь данные — это один массив, в котором хранятся данные, полученные от пользователя.

Комментарии:

1. В чем причина множественных запросов? пользовательский ввод?

2. да, пользовательский ввод может быть такой проблемой, возможно, он создает несколько потоков. Я не знаю

Ответ №1:

Вы можете ограничить одновременные запросы с помощью флага

 var data = null, 
isLoading = false, // perhaps you need to make this persistent depending on your overall architecture
if (!isLoading) 
{
   data = prompt("Enter your data here");
}
if (data !== null || data !== ''){
isLoading = true;
fetch('http://localhost:3000/post', {
  method: 'POST',
  body: JSON.stringify({
    data: data
  }),
  headers: {
    'Content-Type': 'application/json',
  }
}).then((res) => {
  console.log("wait for whole req");
  
  return res.json();
}).then((resData) => {
  console.log(resData);
  console.log("req send successfully");
  isLoading = false
  // note = null;
}).catch((error) => {
  // note = null;
  console.log(error.message);
  isLoading = false
  // alert(error.message);
});