“错误:套接字挂断”与 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) getusepost 方法的返回值。

然而,我似乎无法捕捉到那个错误;它仍然被抛出,我的错误处理程序都没有反应。我可能会错过什么?

【问题讨论】:

【参考方案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 在生产中给出错误:套接字挂断

使用neo4j JS驱动程序进行套接字挂起

Socket.io 1.0 + express 4.2 = 无套接字连接

我正在使用 MS Visual C++ Express 为 C++ 寻找一个简单的套接字接口

如何使用 Socket.io 和 Express 进行集群

在我的 apollo graphQL express 服务器中实现一个套接字连接