提问者:小点点

Socket.IO无法在express App.POST回调中发出


我有一个express应用程序,它打开了与前端React应用程序的套接字连接。

每当有人用json数据向我的服务器发送post请求时,我想向连接的套接字发出一个事件,但是socket.emit没有在。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);
    }
}

共1个答案

匿名用户

斯拉克斯的评论是正确的,但它并没有帮助我解决我的问题。

我最后做的是:

>

  • 在客户端发送到/event的post请求中,我添加了一个包含套接字连接ID的隐藏输入字段。
  • 然后在我的/event路由处理程序中:

    app.post('/event', function(req, res) {
      io.sockets.in(req.body.socketId).emit('someevent', req.body);
      res.sendStatus(200);
    });
    

    这是因为默认情况下,每个套接字连接加入一个用其socket-id标识的房间,并且可以使用IO对象iteself将消息发送到房间(不需要从IO.on('connection',socket=>{})获取套接字对象