我正在使用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
任何人都有其他想法或禁用所有超时的方法吗?
由于