初始化 SocketIO 时未调用 HTTP 路由



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

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

我实现express服务器和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;

我很乐意提供更多所需的细节,并感谢您的帮助。

在反复阅读文档后,我发现了如何做到这一点所以您只需将套接字的路径设置为侦听指定的路径,例如/聊天

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;

这样可以防止socket侦听其他路由,从而允许您在其他路由上进行http请求。

最新更新