【发布时间】:2020-04-03 10:56:14
【问题描述】:
我正在使用 socketio 开发一个聊天应用程序。我遇到的问题是,如果我将io.on('connection', ..}) 块放在快速路线app.get('/chat') 之外,一切正常,但是当我将它放在路线/chat 内时。连接内的所有内容都会触发两次。
server.js
// On new connection
io.on("connection", socket => {
console.log('Socket ID: ' + socket.id);
// I want the user object (inside /chat route) to be available here..
})
// @route:chat
app.get("/chat", auth, async (req, res) => {
const user = User.findbyId(req.userId);
// socket.io part moved outside the route
res.render('chat', {})
})
第一次请求时输出到/chat:
Socket ID: 5e82d1a21c9d4400003e9bce
第二次请求时输出到/chat:
Socket ID: 5e82d1a21c9d4400003e9bce --> this is repeating
Socket ID: 5e82d1a21c9d4400003e9bc4
如果我继续请求/chat,以此类推。
知道如何解决这个问题吗?
【问题讨论】:
-
这是因为您正在为 on('connection') 注册两个事件处理程序。把它放在路线之外。
-
是的,您正在回答标题中的问题...
-
我想在路由中使用io.on("connection")
-
@i.brod 我在哪里注册两个事件处理程序?
-
在您的 GET /chat 路由中。每次请求到达此路由时,您都在为 io.on('connection') 注册另一个处理程序
标签: javascript express websocket socket.io