【问题标题】:How to catch socket.io errors and prevent them from showing up in the console?如何捕获 socket.io 错误并防止它们出现在控制台中?
【发布时间】:2013-01-16 23:01:57
【问题描述】:

我在 node.js 上运行 socket.io,在 Apache 网站上运行 socket.io 客户端。如果我不启动 node.js 服务器并加载客户端页面,则会触发错误事件并显示一条空错误消息,这会导致以下控制台输出:

GET http://example.com:1337/socket.io/1/?t=1359731838906  socket.io.js:1659
Socket.handshake socket.io.js:1659
Socket.connect socket.io.js:1699
Socket socket.io.js:1551
io.connect socket.io.js:94
(anonymous function) general.js:7
(anonymous function)

我能做些什么来阻止这个错误被写入控制台?

【问题讨论】:

标签: javascript node.js error-handling socket.io


【解决方案1】:

您无法“捕获”这些错误,因为它们没有出现在控制台中,但您仍然可以通过侦听套接字的 'connect_error'、'connect_failed' 和 'disconnect' 然后处理它们来处理它们它们直接或将它们重定向到自定义函数,如 handleErrors():

const socket = io.connect(url, { reconnection: false })
socket.on('update', data => console.log(data))

socket.on('connect_error', err => handleErrors(err))
socket.on('connect_failed', err => handleErrors(err))
socket.on('disconnect', err => handleErrors(err))

【讨论】:

    【解决方案2】:

    隐藏该错误的唯一方法是一开始就不要调用io.connect——这当然意味着即使服务器已启动,您的应用程序的套接字函数也无法工作。

    请务必了解,您看到的错误消息既不是 socket.io 本身放置的东西(通过console.error()),也不是未捕获的 JS 异常。

    错误消息由浏览器的 XHR 对象本身放置在您的控制台中。它告诉您 XHR 请求失败(因为您的服务器没有运行)。堆栈跟踪告诉您启动 XHR 请求的代码;它不是实际异常的痕迹。

    由于 socket.io必须向服务器发出请求,因此如果服务器没有响应,它(或您)无法阻止该错误消息出现在控制台中。 p>

    【讨论】:

    • 如果 socket.io 有让用户处理错误的选项怎么办?也许他们在 XHR 上做了一个 try/catch 或错误处理程序并将其委托给客户端?
    【解决方案3】:

    试试

    socket.on('connect_failed', function(){
        console.log('Connection Failed');
    });
    

    未对此进行测试。在这里找到它Node.js socket.io-client connect_failed / connect_error event

    【讨论】:

      【解决方案4】:

      如果您使用的是 Socket.io v4 并且需要捕获中间件错误,请尝试

      // client-side
      socket.on("connect_error", (err) => {
        console.log(err.message); // prints the message associated with the error
      });

      来源https://socket.io/docs/v4/middlewares/#handling-middleware-error

      【讨论】:

        猜你喜欢
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 2021-04-14
        • 2010-11-04
        • 2018-12-03
        • 2016-03-12
        相关资源
        最近更新 更多