websockets / ws TypeError

我收到来自websockets / ws的错误:

/root/diag/node_modules/ws/lib/WebSocket.js:422 event.target = target; ^ TypeError: Cannot assign to read only property 'target' of reserved fields (2, 3) must be empty at WebSocket.onError (/root/diag/node_modules/ws/lib/WebSocket.js:422:18) at WebSocket.emit (events.js:110:17) at Receiver.onerror (/root/diag/node_modules/ws/lib/WebSocket.js:832:10) at Receiver.error (/root/diag/node_modules/ws/lib/Receiver.js:317:8) at Receiver.processPacket (/root/diag/node_modules/ws/lib/Receiver.js:186:12) at Receiver.add (/root/diag/node_modules/ws/lib/Receiver.js:91:24) at firstHandler (/root/diag/node_modules/ws/lib/WebSocket.js:767:22) at process._tickCallback (node.js:355:11) 

这不是指在我的代码中的任何特定的行,所以我甚至不知道在我的代码中造成这一点。

这是模块的新的更新错误还是我做错了什么?

我有一段时间没有更新websocket客户端(这是错误的来源)。

编辑

websocket在两个不同的位置使用:

 // main file that then passes socket to libdiag.js socket.on('connect', function () { socket.emit('authenticate', { method: 'token', credentials: token }); }); socket.on('authenticate', function(packet) { var data = JSON.parse(packet.data); if (packet.channel == CHANNEL && data.status == "authenticated") { libdiag.start(socket, CHANNEL); } }); socket.on('disconnect', function () { start(); }); socket.on('error', function (err) { libdiag.error(err); // This is just a logger that writes to file }); 

和这个文件

 // This is libdiag.js socket.on('data', function (packet) { var data = JSON.parse(packet.data); // New listener is requesting handshake if (packet.type == SOCKET_HANDSHAKE) { _handshake(data); } // A listener has left if (packet.type == SOCKET_CLOSED) { _listenerLeft(data); } if (packet.type == SOCKET_UPDATE) { _read(data); } }); socket.on('disconnect', function () { libdiag.destroy(); // This calls socket.disconnect() and sets the variables to null }); 

我相信你正试图绑定一个DOM Level 2到你的一个websocketscallback,DOM Level 2事件的target属性被设置为readOnly

 // Introduced in DOM Level 2: interface Event { // PhaseType const unsigned short CAPTURING_PHASE = 1; const unsigned short AT_TARGET = 2; const unsigned short BUBBLING_PHASE = 3; readonly attribute DOMString type; readonly attribute EventTarget target; readonly attribute EventTarget currentTarget; readonly attribute unsigned short eventPhase; readonly attribute boolean bubbles; readonly attribute boolean cancelable; readonly attribute DOMTimeStamp timeStamp; void stopPropagation(); void preventDefault(); void initEvent(in DOMString eventTypeArg, in boolean canBubbleArg, in boolean cancelableArg); }; 

看起来在你的stream程中,东西是触发websocket的onError处理程序,它试图改变event.target

 function onError (event) { event.type = 'error'; event.target = target; listener.call(target, event); } 

我相信这是您在控制台中看到的错误的根本原因。 如果您向我们展示关于您绑定的事件/callback/处理程序的代码或使用您的webSocket来确定不使用DOM级别2事件的方法,将会有所帮助。