初始化 SocketIO 时未调用 HTTP 路由

Posted

技术标签:

【中文标题】初始化 SocketIO 时未调用 HTTP 路由【英文标题】:HTTP routes aren't getting called with SocketIO being initialised 【发布时间】: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;

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

【问题讨论】:

【参考方案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 请求。

【讨论】:

以上是关于初始化 SocketIO 时未调用 HTTP 路由的主要内容,如果未能解决你的问题,请参考以下文章

导航到路由参数时未调用 ngOnInit

在 vuex 操作中调用时未定义路由器

使用调用控制器的路由时未识别的控制器

从 Angular2 路由中的子组件调用 router.parent.navigate 方法时未触发组件构造函数和路由器生命周期挂钩

将参数传递给路由时未定义路由

使用情节提要时未调用 UITableViewController 覆盖初始化函数