我有一个快速应用程序,它打开与我的前端 React 应用程序的套接字连接。
每当有人使用 json 数据向我的服务器发送 post 请求但 socket.emit 不会在 a.post 回调中触发时,我想向连接的套接字发出一个事件。然而 io.sockets.emit 工作正常,但在这种情况下对我来说没有用。
这失败了:
io.on('connection', (socket) => {
app.post('/event', (req, res) => {
socket.emit('someevent', req.body);
res.sendStatus(200);
}
}
但是这过去了:
io.on('connection', (socket) => {
app.post('/event', (req, res) => {
io.sockets.emit('someevent', req.body);
res.sendStatus(200);
}
}
最佳答案
SLaks的评论是正确的,但它并没有帮助我解决我的问题。
我最终做的是:
- 在客户端发送到
/event
的 post 请求中,我添加了一个隐藏的输入字段,其中包含套接字连接的 ID。 然后在我的
/event
路由处理程序中,我做了:app.post('/event', function(req, res) { io.sockets.in(req.body.socketId).emit('someevent', req.body); res.sendStatus(200); });
这是可行的,因为默认情况下每个套接字连接都会加入一个用其套接字 ID 标识的房间,并且可以使用 io 对象 itself 将消息发送到房间(无需从 获取套接字对象>io.on('连接', 套接字 =>{})
关于javascript - socket.io 无法在 Express app.post 回调中发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870801/