防止使用 fetch 发送多个 http 请求
Posted
技术标签:
【中文标题】防止使用 fetch 发送多个 http 请求【英文标题】:prevent multiple http request send by using fetch 【发布时间】:2021-03-22 16:57:53 【问题描述】:我正在创建一个 chrome 扩展程序,在其中我使用提示符获取输入并使用 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"
);
);
在这里,data 是一个数组,用于存储从用户那里获取的数据。
【问题讨论】:
多次请求是什么原因?用户输入? 是的,用户输入可能是那个问题,也许它正在创建多个线程。我不知道 【参考方案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);
);
【讨论】:
以上是关于防止使用 fetch 发送多个 http 请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 fetch 从通过 golang 提供的 HTML 文件发送请求
原fetch跨域请求附带cookie(credentials)