Ich habe beim Aufbau einer Websocket-Verbindung mit socket.io und node.js einen Fehler festgestellt. Hier ist meine Umgebung:Node.js & Socket.io - Kann die Eigenschaft 'on' von undefined nicht lesen
- OS: Windows 7
- Knoten: 6.9.2
- NPM: 4.0.5
- Pakete:
- "Express": „^ 4.14.0 "
- "socket.io": "1.7.1"
- "socket.io-Client": "1.7.1"
- "ws": "1.1.1"
Wenn eine WebSocket-Verbindung versucht wird, wird der folgende Fehler ausgelöst wird:
TypeError: Cannot read property 'on' of undefined
at PerMessageDeflate.decompress (C:\ng-project\node_modules\ws\lib\PerMessageDeflate.js:242:37)
at Receiver.applyExtensions (C:\ng-project\node_modules\ws\lib\Receiver.js:362:54)
at C:\ng-project\node_modules\ws\lib\Receiver.js:508:14
at Receiver.flush (C:\ng-project\node_modules\ws\lib\Receiver.js:347:3)
at Receiver.opcodes.1.finish (C:\ng-project\node_modules\ws\lib\Receiver.js:541:12)
at Receiver.expectHandler (C:\ng-project\node_modules\ws\lib\Receiver.js:493:33)
at Receiver.add (C:\ng-project\node_modules\ws\lib\Receiver.js:103:24)
at Socket.realHandler (C:\ng-project\node_modules\ws\lib\WebSocket.js:825:20)
at ZoneDelegate.invokeTask (C:\ng-project\node_modules\zone.js\dist\zone-node.js:265:35)
at Zone.runTask (C:\ng-project\node_modules\zone.js\dist\zone-node.js:154:47)
at Socket.ZoneTask.invoke (C:\ng-project\node_modules\zone.js\dist\zone-node.js:335:33)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:177:18)
at Socket.Readable.push (_stream_readable.js:135:10)
at TCP.onread (net.js:542:20)
in der Suche den ws
Modul I die Codezeile sehen kann, den Fehler zu werfen:
this._inflate.on('error', onError).on('data', onData);
_inflate
ist eine zlib InflateRaw
Instanz erstellt von zlib.createInflateRaw({...})
ein paar Zeilen früher. Das Problem ist, dass die Funktion InflateRaw#on
undefined
in meiner Umgebung zurückgibt.
Ich habe versucht, alternative Versionen von Node zu installieren, um dies ohne Glück zu umgehen ... Das ws
-Paket zu ändern ist keine akzeptable Problemumgehung für mich.
EDIT 1: Hinzufügen von Quellcode, der den Fehler auslöst.
io.on('connection', (socket) => {
// Listen for verification subscription requests
log.debug("Established socket connection " + socket.id);
socket.on('verify subscribe', (msg) => {
log.debug("Recieved 'verify subscribe' message: " + JSON.stringify(msg));
// Do stuff....
});
});
Dieser Code gibt die folgenden Protokollmeldungen vor dem Fehler:
[2016-12-30T19:08:09.219Z] DEBUG: Established socket connection -g9oZM6pEqpFyU_BAAAA
[2016-12-30T19:08:09.275Z] DEBUG: Recieved 'verify subscribe' message: {"token":"short-ish.token","authorization":"long.auth-token"}
Dieser Fehler kann irreführend sein, können Sie ein Beispiel des Codes, der Websockets verwendet, veröffentlichen? – ppovoski
Fertig - siehe bearbeiten – bdunn