“错误:套接字挂断”与 Express
Posted
技术标签:
【中文标题】“错误:套接字挂断”与 Express【英文标题】:"Error: socket hang up" with Express 【发布时间】:2014-07-27 13:32:00 【问题描述】:当客户端刷新但仍在加载页面时,节点会一直退出我(因此套接字被终止,而我仍在处理请求)。错误:
[ERROR] - Error: socket hang up
at createHangUpError (http.js:1472:15)
at Socket.socketCloseListener (http.js:1522:23)
at Socket.EventEmitter.emit (events.js:95:17)
at TCP.close (net.js:465:12) (at lib/Maintenance.js:38)
我尝试将on('error', ...
附加到:
req
对象
listen
的返回值(我用的是Express)
get
、use
和 post
方法的返回值。
然而,我似乎无法捕捉到那个错误;它仍然被抛出,我的错误处理程序都没有反应。我可能会错过什么?
【问题讨论】:
【参考方案1】:将错误侦听器附加到套接字对象
app.use(function(req, res, next)
req.socket.on("error", function()
);
res.socket.on("error", function()
);
next();
);
【讨论】:
谢谢!过几次我会试试的。采取什么适当的措施?我可以忽略它,还是我必须以某种方式停止对req
对象的所有操作?
@Domi 正确的做法是停止您为此特定请求/res 所做的任何处理
这似乎太危险了……难道没有默认的解决方案吗?就像在每个操作之前添加这样的:if (!req.errored) req.doSomething
?或者http
不应该在Request
的所有方法中都内置这个功能?
谢谢,实际上需要套接字错误处理程序。按照How to debug a socket hang up error in NodeJS? 中的建议,我最终使用了longjohn。原来,错误是因为我没有向我的http-proxy 实例添加错误侦听器而引发的。
@Esailija 但为什么要两次?【参考方案2】:
尝试捕捉这样的错误,看看它是否有效..
app.use(function(err,req, res, next)
if(err)console.log(err);
next();
);
【讨论】:
以上是关于“错误:套接字挂断”与 Express的主要内容,如果未能解决你的问题,请参考以下文章
带有 Gunicorn 的 Flask App 在生产中给出错误:套接字挂断
Socket.io 1.0 + express 4.2 = 无套接字连接