gpt4 book ai didi

node.js - Express 请求第二次触发

转载 作者:搜寻专家 更新时间:2023-10-31 23:56:41 25 4
gpt4 key购买 nike

我在这里有点停顿。

我正在创建一个 Express 应用程序,它必须通过单个请求从 Shopify 商店导出大量数据。

问题是,当我到达 2 分钟标记时,请求再次被触发(因为默认超时为 2 分钟),所以我增加了 server.setTimeout() 以考虑时间它需要。

所以这修复了请求在 2 分钟标记处的触发,但是一旦我的请求完成,出于某种原因再次发出第二个请求。

这是该问题的一个简单示例:

const express = require('express');

function sleep(ms){
return new Promise(resolve=>{
setTimeout(resolve,ms)
})
}

app.get('/export', async (req, res) => {
// Sleep for 2:03min
await sleep(123000);
console.log('Starting request');
res.status(200).send('Finish');
})

const server = app.listen(3000, () => {
console.log(`Example app listening on port ${port}`)
})
// Set timeout to 2:04min
server.setTimeout(124000);

如果你打开http://localhost:3000/export上述代码的结果返回:

开始请求 <- 在开头

开始请求 <- 在 2:04 标记处

这是不是因为异步/等待的问题,因为 res.send() 似乎永远不会触发?

有人可以澄清“为什么”会发生这种情况以及“如何”防止这种情况发生吗?

PS:我不能使用标志或其他东西来检查请求是否已经发出,因为 APP 需要为同时导出数据的用户工作,而第二个请求作为一个全新的。

最佳答案

好吧,我今天在这上面浪费了大约 4 个小时,结论是我的 tunel 服务 ( http://serveo.net/ ) 在我的导出完成时的某个时间完美地触发了另一个请求。 (至于为什么,我没有答案)我仍然不确定这是否是正确的结论,但切换到不同的选项(或使用直接本地主机)没有显示任何问题。

我转移到 OpenVPN,我所有的问题都消失了。 Ngrok 也不错,但由于免费版本没有固定的 URL(每天我启动服务时更改应用程序设置中的所有端点很痛苦)我选择了 OpenVPN。

问题的根源在于 res.status(200).send('Finish') 从未因为某些特定原因而触发,或者如果确实如此,它似乎也不是。

感谢所有的帮助。

关于node.js - Express 请求第二次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55298070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com