【发布时间】:2021-11-18 13:43:01
【问题描述】:
请建议我在不同文件中访问socket 的最佳方式。我正在使用 socket.io。
index.js
io.on("connection", socket => {
socket.on("message", onMessageRecieved)
})
message.js
const onMessageRecieved = (payload) => {
try {
console.log(socket.id)
} catch (error) {
console.log(error);
}
}
我知道这是一种方法。
io.on("connection", socket => {
socket.on("message", (payload)=>onMessageRecieved(payload, socket))
})
但是有没有其他方法。我需要它,因为我将用户数据保存到socket.uid="ABC_NAME" 之类的套接字,并希望在收到消息后访问。
已编辑:我试图使用中间件来做同样的事情。下面的代码有效,但是在使用套接字时出现错误“超出最大调用堆栈大小”。
//a = socket, x= socket.on()
let a = {
z : 1,
x : function(m=1, n) {
n(m, a)
}
}
let e = (arg1, arg2) => {
console.log(arg1, arg2.z);
}
a.x(2, e)
【问题讨论】:
-
"但是还有其他方法吗?" - 没有。您找到的解决方案有什么问题?请注意,有多个连接和多个套接字,因此您必须始终将特定套接字显式传递给您的函数才能访问它。没有可用于此的全局变量。
-
我们可以覆盖中间件内部的函数,这样我就不必每次都这样做了吗?我正在寻找另一种清洁代码的方法。
标签: javascript node.js express socket.io