javascript - socket.io 无法在 Express app.post 回调中发出

标签 javascript node.js express socket.io

我有一个快速应用程序,它打开与我的前端 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的评论是正确的,但它并没有帮助我解决我的问题。

我最终做的是:

  1. 在客户端发送到 /event 的 post 请求中,我添加了一个隐藏的输入字段,其中包含套接字连接的 ID。
  2. 然后在我的 /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/

相关文章:

javascript - 为什么内部函数先于外部函数调用?

javascript - 如何使用常规 JS 为按钮实现切换效果?

node.js - Node.js 的 mutler 模块安装失败

javascript - mongodb 不保存来自node.js 的条目

使用 Plates 进行 Javascript (nodejs) 模板化

javascript - 在选择的 jQuery UI 选项卡上显示/隐藏某些 div

node.js - Socket.io - 共享 "friends activity"设计模式

android - 文本段落程序逻辑中的用户标记

JavaScript 或 NPM 模块,用于检查两个对象的属性是否冲突/碰撞

node.js - 如何使用 mongoose 连接到 mongoDB Atlas