Node.js 和 Socket.io UTF8 验证 TypeError 来自 ws

Posted

技术标签:

【中文标题】Node.js 和 Socket.io UTF8 验证 TypeError 来自 ws【英文标题】:Node.js and Socket.io UTF8 Validation TypeError coming from ws 【发布时间】:2017-07-18 20:09:44 【问题描述】:

验证通过 socket.io 从客户端接收到的数据时出现此错误。

C:\Users\Rayce\Documents\SENG513\node-js-getting-started\node_modules\socket.io\node_modules\ws\lib\Receiver.js:532
6:23:55 PM web.1 |              if (!Validation.isValidUTF8(messageBuffer)) 
6:23:55 PM web.1 |                             ^
6:23:55 PM web.1 |  TypeError: Cannot read property 'isValidUTF8' of undefined
6:23:55 PM web.1 |      at C:\Users\Rayce\Documents\SENG513\node-js-getting-started\node_modules\socket.io\node_modules\ws\lib\Receiver.js:532:28
6:23:55 PM web.1 |      at C:\Users\Rayce\Documents\SENG513\node-js-getting-started\node_modules\socket.io\node_modules\ws\lib\Receiver.js:368:7
6:23:55 PM web.1 |      at C:\Users\Rayce\Documents\SENG513\node-js-getting-started\node_modules\socket.io\node_modules\ws\lib\PerMessageDeflate.js:249:5
6:23:55 PM web.1 |      at afterWrite (_stream_writable.js:355:3)
6:23:55 PM web.1 |      at onwrite (_stream_writable.js:346:7)
6:23:55 PM web.1 |      at WritableState.onwrite (_stream_writable.js:89:5)
6:23:55 PM web.1 |      at afterTransform (_stream_transform.js:79:3)
6:23:55 PM web.1 |      at TransformState.afterTransform (_stream_transform.js:54:12)
6:23:55 PM web.1 |      at Zlib.callback (zlib.js:613:5)
[DONE] Killing all processes with signal  null
6:23:55 PM web.1 Exited with exit code 1

在 Receiver.js 中编辑出这部分代码,

if (!Validation.isValidUTF8(messageBuffer)) 
  self.error('invalid utf8 sequence', 1007);
  return;

阻止错误发生,但我更喜欢更好的解决方案,因为我想使用 NPM 并且每次发生更新时都不必费心重做。

我也尝试将 utf-8-validate 安装到 socket.io 的 node_modules 文件夹中,但没有成功

【问题讨论】:

你能解决吗?我有同样的问题 我也有同样的问题,求各位大神帮忙^-^ 【参考方案1】:

更新:升级ws v2.x 可以解决这个问题!

像这样在wsmodule 中更改Receiver.js

var isValidUTF8 = require('./Validation')
...
if (!isValidUTF8(messageBuffer)) 
  ...

你可以这样做只是让它工作,但这不是一个好的解决方案,似乎Validation模块导出错误,你可以发送PR到ws解决这个问题。

【讨论】:

以上是关于Node.js 和 Socket.io UTF8 验证 TypeError 来自 ws的主要内容,如果未能解决你的问题,请参考以下文章

node.js、socket.io 和 SSL

Node.js、多线程和 Socket.io

Phaser.js 中的 Node.js 和 Socket.io 未连接 socket.io/?EIO=3&transport=polling

node.js + socket.io:拍卖网站开发

如何将 Asterisk ARI 与 socket.io 和 Node.js 一起使用

Node.js 使用 socket.io 进行重构