Javascript Node.js&;Socket.io-无法读取属性';在';未定义的

Javascript Node.js&;Socket.io-无法读取属性';在';未定义的,javascript,node.js,express,typescript,socket.io,Javascript,Node.js,Express,Typescript,Socket.io,我在使用socket.io和node.js建立websocket连接时遇到错误。这是我的环境: 操作系统:Windows7 节点:6.9.2 净现值:4.0.5 套餐: “express”:“^4.14.0” “socket.io”:“1.7.1” “socket.io客户端”:“1.7.1” “ws”:“1.1.1” 尝试websocket连接时,会引发以下错误: TypeError: Cannot read property 'on' of undefined at PerM

我在使用socket.io和node.js建立websocket连接时遇到错误。这是我的环境:

  • 操作系统:Windows7
  • 节点:6.9.2
  • 净现值:4.0.5
  • 套餐:
    • “express”:“^4.14.0”
    • “socket.io”:“1.7.1”
    • “socket.io客户端”:“1.7.1”
    • “ws”:“1.1.1”
尝试websocket连接时,会引发以下错误:

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)
查看
ws
模块,我可以看到抛出错误的代码行:

this._inflate.on('error', onError).on('data', onData);
[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"}
\u inflate
是由前面几行创建的zlib
InflateRaw
实例。问题是
InflateRaw#on
函数在我的环境中返回
undefined

我已经尝试安装节点的替代版本来解决这个问题,但没有任何运气。。。更改
ws
包对我来说不是一个可接受的解决方法

编辑1: 添加引发错误的源代码

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....
  });
});
此代码在发生错误之前输出以下日志消息:

this._inflate.on('error', onError).on('data', onData);
[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"}

您的
io
尚未设置。确保你已经完成了

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
从文档聊天示例中-

如果不设置
io
,它将是
未定义的

另见:


该问题被发现是zone.js的一个bug,并已在更高版本(>0.7.0)中修复。该问题在GitHub上跟踪到:。

此错误可能会产生误导,您可以发布使用WebSocket的代码示例吗?完成-请阅读问题。从提供的堆栈跟踪中可以清楚地看出,
io
变量不是问题所在。