2016-12-30 25 views
1

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#onundefined 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"} 
+2

Dieser Fehler kann irreführend sein, können Sie ein Beispiel des Codes, der Websockets verwendet, veröffentlichen? – ppovoski

+0

Fertig - siehe bearbeiten – bdunn

Antwort

0

Dieses Problem entdeckt wurde, um einen Fehler mit zone.js zu sein und hat sich in späteren Versionen (> 0.7.0) festgesetzt worden. Das Problem wird hier auf GitHub verfolgt: angular/zone.js#508.

-1

Sie io ist noch nicht festgelegt. Stellen Sie sicher,

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

Aus der Dokumentation gemacht haben Beispiel Chat - http://socket.io/get-started/chat/

Wenn Sie nicht Setup tun io es undefined sein wird.

Siehe auch: http://socket.io/docs/#

var app = require('http').createServer(handler) 
var io = require('socket.io')(app); 
+0

Bitte lesen Sie die Frage. Aus dem Stack-Trace sollte klar hervorgehen, dass die 'io'-Variable nicht das Problem ist. – bdunn

Verwandte Themen