Javascript socket.io无法在express app.post回调中发出
我有一个express应用程序,它可以打开与前端React应用程序的套接字连接 每当有人用json数据向我的服务器发送post请求时,我想向连接的套接字发出一个事件,但socket.emit不会在.post回调中触发。然而,io.sockets.emit工作正常,但在这种情况下对我没有用处 这失败了:Javascript socket.io无法在express app.post回调中发出,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我有一个express应用程序,它可以打开与前端React应用程序的套接字连接 每当有人用json数据向我的服务器发送post请求时,我想向连接的套接字发出一个事件,但socket.emit不会在.post回调中触发。然而,io.sockets.emit工作正常,但在这种情况下对我没有用处 这失败了: io.on('connection', (socket) => { app.post('/event', (req, res) => { socket.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);
}
}
的评论是正确的,但它并没有帮助我解决我的问题
我最后做的是:
/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
对象本身将消息发送到文件室(无需从io.on('connection',socket=>{})
您正在添加一个单独的post处理程序(使用相同的URL)对于每个套接字连接。只能运行一个路由处理程序。这不是您想要做的。