快递请求再次触发

时间:2019-03-22 10:53:45

标签: node.js 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,则上述代码的结果将返回:

Starting request <-开头

Starting request <-在2:04标记

这是不是因为async / await而引起问题,因为似乎res.send()从未触发?

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

PS:我无法使用标记或其他方式来检查请求是否已经发出,因为APP需要为同时导出数据的用户和第二个请求工作是全新的。

1 个答案:

答案 0 :(得分:1)

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

我移至OpenVPN,所有问题都消失了。 Ngrok也可以,但是由于免费版本没有固定的URL(每天启动服务时都要更改App设置中的所有端点很痛苦),所以我选择了OpenVPN。

问题的根源是<ng-content select=".headerText{{some_id}}"></ng-content> 从未出于某种特定原因被解雇,或者如果确实不是,则被解雇。

感谢所有帮助。