【问题标题】:HTTP routes aren't getting called with SocketIO being initialised初始化 SocketIO 时未调用 HTTP 路由
【发布时间】:2021-12-29 16:10:13
【问题描述】:

所以我试图构建一个使用 socket.io 进行消息传递和快速路由来处理常规 http 请求的应用程序。问题是对这些路由的 http 调用不会发生,我得到一个 socket.io 错误,如下所示

{
    "code": 0,
    "message": "Transport unknown"
}

我实现 express server 和 socket.io 的方式是

  app.use(express.json());
  app.use(
    cors({
      origin: FRONTEND_CORS,
    })
  );

  // setting up socket io
  const io = new Server(httpServer, {
    path: "/",
    cors: {
      origin: FRONTEND_CORS,
      methods: ["GET", "POST,"],
      credentials: false,
    },
  });
  io.on("connection", (socket: Socket) => {
  });
  
    httpServer.listen(PORT, () => {
    console.log(`server is running on port ${PORT}`);
  });

  app.use(voucherRoutes);

这里voucherRoutes代表我尝试访问的http路由

const router = express.Router();

router.get("/api/fetchVouchers", FetchAllVouchers);
router.post("/api/addVoucher", CreateVoucher);
router.get("/api/getCurrentId", FetchCurrentId);

export default router;

我很乐意提供所需的更多详细信息,并感谢任何帮助。

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    在阅读和重新阅读文档之后,我想出了如何去做 所以你只需设置套接字的路径来监听指定的路径,比如说 /聊天

      const io = new Server(httpServer, {
        path: "/chat",
        cors: {
          origin: FRONTEND_CORS,
          methods: ["GET", "POST,"],
          credentials: false,
        },
      });
    
    

    接下来使用 app.set 设置你的 io 对象

      app.set("socketio", io);
    

    设置一个名为 /chat 的路由(因为我将套接字设置为监听 /chat)

    router.get("/chat", function () {
    }
    export default router;
    

    这应该会阻止套接字侦听其他路由,从而让您在其他路由上发出 http 请求。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多