【问题标题】:"Error: socket hang up" with Express“错误:套接字挂断”与 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', ... 附加到:

  1. req 对象
  2. listen的返回值(我用的是Express)
  3. getusepost 方法的返回值。

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

【问题讨论】:

    标签: node.js sockets http express io


    【解决方案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();
    });
    

    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 1970-01-01
      • 2018-01-29
      • 2014-10-06
      • 2019-02-14
      • 2013-10-05
      • 2015-05-03
      • 2015-10-30
      相关资源
      最近更新 更多