【问题标题】:Using Socket.IO together with Express and NodeJS exports将 Socket.IO 与 Express 和 NodeJS 导出一起使用
【发布时间】:2018-06-02 00:40:16
【问题描述】:

我正在尝试将我的 Express 和 Socket 连接连接在一起。我认为我的设置很巧妙,但不是在我想这样做的时候:

  1. 用户创建了一个新房间。 POST 到后端 Express 服务器。
  2. app.post() 然后将输入发送到导出,该导出处理所有数据库连接。
  3. 当它保存在数据库中时,通过套接字向所有人广播已添加新房间。

这可以仅使用套接字来完成吗?是的。但我不是那种生活。

RoomRouter.js

exports.createRoom = (req, response) => {
    new Room(req.body).save((err, room) => {
        response.status(200).send(room);
    });
};

app.js

/*
 * Express setup is left out, because we don't need to focus on that.
 * "app" is const app = express();
 */
const RoomRouter = require("./RoomRouter");

app.post("/room/create", RoomRouter.createRoom);

io.on("connection", (socket) => {
    //I want to broadcast the room to everyone
    //io.emit("newRoom", room);
});

Express 部分工作正常,POST 工作正常。现在,如何将 Socket.IO 连接到它,以便向所有人广播已添加新房间?

【问题讨论】:

    标签: node.js sockets express socket.io


    【解决方案1】:

    我不确定你真正想要什么,但如果你想在你的路由中使用 socket io,我认为你必须像这样声明你的路由:

    RoomRouter.js

    exports.createRoom = (io) => {
       return (req, response) => {
          new Room(req.body).save((err, room) => {
             io.emit("newRoom", room);
             response.status(200).send(room);
          });
       };
    };
    

    在你的 app.js

    app.post("/room/create", RoomRouter.createRoom(io));
    

    希望对你有帮助。

    【讨论】:

    • 嗯,不是我想要的。 createRoom 已经将 req, response 作为参数。
    • 是的,但是通过这种方法,您也可以将io 作为参数,然后在您的路由中直接发出newRoom :)
    • 哦,是的,我现在看到了 - 很有趣。与其将io 解析为每个方法,不如以某种方式包含它不是更好吗?就像制作一个可以包含在任何地方的服务一样,也许?
    • 嗯.. 我的方法是将io 传递给每条路线,但我认为你也可以用不同的方式来做到这一点:)
    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2011-08-18
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多