发行:
VS代码中的本地开发运行时没有问题或崩溃。但是,当我将应用程序上载到服务器(node.js)时,它将一直运行,直到建立Socket.io连接或刷新已连接的网页。我不知道这是否与管理UI具体相关,如下面的文件路径,或者这是否是一个Socket.io问题。也许,这也与中间件有关,中间件在操作完成之前会搁置请求,这样就无法访问不存在的数据。
我已经试着更新了npm包,但是没有什么改变。
// middleware is executed on every request
var Map = require('./file')
module.exports = (io, socket) => {
socket.use(async (packet, next) => {
var key = socket.handshake.auth.key
var data = Map.get(key)
while(!data.action) { // true for finished or false for loading
await new Promise(resolve => setTimeout(resolve,10))
}
socket.data = data
next()
})
}Serverconsole:
/usr/src/app/node_modules/@socket.io/admin-ui/dist/index.js:233
socket.data._admin.transport = transport.name;
^
TypeError: Cannot set properties of undefined (setting 'transport')
at Socket.<anonymous> (/usr/src/app/node_modules/@socket.io/admin-ui/dist/index.js:233:42)
at Socket.emit (node:events:390:28)
at WebSocket.onPacket (/usr/src/app/node_modules/engine.io/build/socket.js:214:22)
at WebSocket.emit (node:events:390:28)
at WebSocket.onPacket (/usr/src/app/node_modules/engine.io/build/transport.js:92:14)
at WebSocket.onData (/usr/src/app/node_modules/engine.io/build/transport.js:101:14)
at WebSocket.<anonymous> (/usr/src/app/node_modules/engine.io/build/transports/websocket.js:20:19)
at WebSocket.emit (node:events:390:28)
at Receiver.receiverOnMessage (/usr/src/app/node_modules/ws/lib/websocket.js:1022:20)
at Receiver.emit (node:events:390:28)
Node.js v17.3.1发布于 2022-10-06 09:19:01
我还直接在GitHub上询问了开发人员的问题,并得到了答案。
有人告诉我,数据是用socket.data = value覆盖的。
例如,如果我将它更改为socket.socketDate,那么它就能正常工作。
请参阅关于GitHub的完整答案以及socket.io管理ui的参考代码:
https://stackoverflow.com/questions/73952881
复制相似问题