初始化 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 路由的主要内容,如果未能解决你的问题,请参考以下文章
从 Angular2 路由中的子组件调用 router.parent.navigate 方法时未触发组件构造函数和路由器生命周期挂钩