javascript - 套接字 : Error: Lone surrogate U+D83D is not a scalar value

标签 javascript node.js express socket.io

最近,由于这个 socket.io 错误,我的 Node.js 服务器经常崩溃。我怀疑客户端正在发送无效的 utf 字符串,这将在 utf8.js 文件中引发错误。有没有办法避免服务器崩溃?这非常令人沮丧。如果需要的话,我会修补这个文件。

Error: Lone surrogate U+D83D is not a scalar value
at Error (native)
at checkScalarValue (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:69:10)
at encodeCodePoint (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:90:4)
at Object.utf8encode [as encode] (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:111:18)
at Object.exports.encodePacket (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:74:34)
at encodeOne (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:387:13)
at eachWithIndex (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:256:5)
at map (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:263:5)
at Object.exports.encodePayloadAsBinary (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:411:3)
at Object.exports.encodePayload (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:225:20)
at XHR.Polling.send (/root/node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js:238:10)
at Socket.flush (/root/node_modules/socket.io/node_modules/engine.io/lib/socket.js:341:20)
at Socket.sendPacket (/root/node_modules/socket.io/node_modules/engine.io/lib/socket.js:317:10)
at Socket.send.Socket.write (/root/node_modules/socket.io/node_modules/engine.io/lib/socket.js:290:8)
at writeToEngine (/root/node_modules/socket.io/lib/client.js:148:17)
at Client.packet (/root/node_modules/socket.io/lib/client.js:159:7)

最佳答案

可能您正在尝试以错误的方式发送数据。

您可以尝试在 Client/socket.packet 周围进行try {} catch (e) {},或者执行如下操作:

process.on('uncaughtException', (err) => {
  console.log(`Caught exception: ${err}`);
});

防止服务器死机。

关于javascript - 套接字 : Error: Lone surrogate U+D83D is not a scalar value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624060/

相关文章:

javascript - JSP 中的自动完成 - 是否可以查询每次输入,而不是提前将所有列表放在脚本上?

javascript - 数据库表中唯一的随机字符串

javascript - 将 URL 替换为 HTML Jquery

node.js - 在服务器中使用 mobx-model

node.js - 是否可以使用express.js 服务器在 VS-Code 调试器内进行热重载

javascript - 将许多表单输入值从子窗口传递到父窗口的更好方法

javascript - 从 Node.js 多次调用 Web 服务

javascript - 在 Mocha 中测试 MySQL 连接

javascript - Expressjs : Connect public webserver (on a vserver) with local raspberry pi

node.js - 应用程序为同一用户创建两个 session - Express js