Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript socket.io无法在express app.post回调中发出_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript socket.io无法在express app.post回调中发出

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

我有一个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);
    }
}
的评论是正确的,但它并没有帮助我解决我的问题

我最后做的是:

  • 在从客户端发送到
    /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)对于每个套接字连接。只能运行一个路由处理程序。这不是您想要做的。