Express.js和axios路由超时

时间:2018-05-22 19:43:38

标签: ajax express axios

我正在使用express.js为私有项目生成一些路由。这个特定的路线需要很长时间才能执行(大约3分钟)。由于这只是我自己的项目,我真的不介意等待。

这是我的路线:

router.get('/', (req, res) => {
  req.setTimeout(0);
  console.log('Start ' + new Date());
  let data = [];
  //... very large code that fetch a lots of data and update the data variable
  res.json(data);
  console.log('End ' + new Date());
});

如果我直接在浏览器网址中执行请求,则该页面需要很长时间才能加载,但过一会儿,会正确显示结果。

但是,如果我使用axios来制作像这样的ajax请求

axios({
  method: 'get', 
  url: `/api/simulation?idSession=${this.props.match.params.session}`,
  timeout: 600000,
}).then(result => {

  this.setState({
    simulation: {
      loading: false,
      data: result.data
    }
  }).catch(err => alert(err));
});

我将收到第一个带有“开始”和日期的console.log,并且几乎在此之后的2分钟(或多或少几毫秒),我将再次收到“开始”console.log,并再次

我将在循环中收到“启动”控制台日志,直到我重新启动节点服务器或使用ajax请求关闭浏览器页面。

之后我仍会看到'结束'console.log,但是axios似乎忽略了它。

我虽然通过添加req.setTimeout(0);在我的路线中,它可以解决问题,但它似乎没有改变任何东西。

由于问题只发生在我通过带有axios的ajax请求调用路由时,我试图进行大的超时,但是也没有做任何事情。

以防万一,我的nodejs版本是8.11.2,express版本是4.16.3,axios是0.18.0

任何人都有其他想法或禁用所有超时的方法吗?

由于

0 个答案:

没有答案