express怎么设置请求超时时间?
发布于 6 年前 作者 zhangjh 12545 次浏览 最后一次编辑是 5 年前 来自 问答

你们有没有遇到过用ajax发送请求时,如果是一个耗时任务,那么通常在好几分钟内都不会返回。

这时候ajax会重复发送请求,于是在请求完成的时候就会造成返回多次,造成node报“头部已经设置过”的错误。

尝试过给ajax设置timeout以及在app.js里给server设置超时,但是都不管用。。。

var server = app.listen(app.get('port'), function() {
	  console.log('Express server listening on port ' + app.get('port'));
});

server.timeout = 1200000; //1200s,请求超时时间设置为20min

不知道有没有同学遇到过这种问题,请不吝赐教,多谢了。

9 回复

遇到过,最后用socket.io解决

来自酷炫的 CNodeMD

@klesh 能介绍下思路吗?我一直想通过将请求的返回时间设置长一点但一直没有找到合适的方法

有没有人解释下“ajax会重复发送请求”这句话?

socket.io 底层是 websocket 或者长连接,总之把它当成一个 socket 来用,任务完成之后再发送消息给客户端就行了。这样不管时间多长都没关系了

耗时的做法,最好是使用pub/sub,比如faye模块,走的也是websocket

算了,不折腾了,学习了下socket.io感觉不错应该能解决问题,多谢 @klesh 不过改动太大,暂时不这么做了,还是采取了折中的方法:响应提前返回,在接收到请求后就发回空响应了,然后客户端再设置定时器查询认为状态改变前端页面的显示

有个timeout的中间件

@yalishizhude 没用,不是设置响应超时的

设置res.socket.timeout 完美解决我下大文件的问题

回到顶部