如何在JavaScript中获取WebSocket的错误代码及错误信息
WebSocket连接错误(499)的信息获取方案
问题背景
创建WebSocket连接时触发错误,控制台提示:"Websocket connection to ...ip... failed: Error during WebSocket handshake: Unexpected response code: 499",推测是杀毒软件拦截连接导致。当前代码中try/catch无法捕获该错误,onclose事件触发但无法从事件对象中提取错误详情。
相关代码
let errMsg = ""; try { socket = new WebSocket(server_ip.value, "chat"); // (*) } catch(err) { // js doesn't come to this branch Websocketerror = true; errMsg = "Websocket creation error. Code = " + err.code.toString() + " Description = _" + err.message + "_"; } if (websocketError) { appendMessageText(errMsg, "msg_err"); } else { socket.onopen = ws_OnConnectionCreated; socket.onclose = ws_onConnectionClose; socket.onerror = ws_OnConnectionError; } function ws_onConnectionClose(event) { let status = event.wasClean ? "ok." : "(aborted)."; appendMessageText("Websocket is closed" + status, "msg_log"); console.log("------> ws_onConnectionClose(event): event =", event); };
解决方案
1. 实现onerror事件处理函数
WebSocket连接错误属于异步错误,不会被同步try/catch捕获,必须通过onerror事件获取错误详情:
function ws_OnConnectionError(event) { console.error("WebSocket错误详情:", event); // 部分浏览器会在event.message中返回错误描述 errMsg = "WebSocket连接失败: " + (event.message || "未知错误"); appendMessageText(errMsg, "msg_err"); websocketError = true; }
2. 增强onclose事件的信息提取
在onclose事件中,可通过event.code和event.reason获取关闭的错误码与原因(非标准错误码可能因浏览器存在差异):
function ws_onConnectionClose(event) { let status = event.wasClean ? "正常关闭" : "异常中断"; let closeInfo = `WebSocket已关闭: ${status},错误码: ${event.code},原因: ${event.reason || "无"}`; appendMessageText(closeInfo, "msg_log"); console.log("WebSocket关闭详情:", event); }
3. 修正变量名大小写错误
代码中Websocketerror与websocketError大小写不一致,会导致错误状态判断失效,需统一变量名:
// catch块中修正为小写开头 websocketError = true;
关键说明
- WebSocket连接错误为异步触发,同步
try/catch无法捕获,必须依赖onerror事件 - 结合
onerror和onclose事件可完整获取连接失败的错误信息 - 非标准错误码(如499)可能需要通过
onerror事件对象或浏览器控制台日志进一步确认
内容的提问来源于stack exchange,提问作者Tobic
相关产品推荐
相关产品推荐

