#node.js #express #socket.io
Вопрос:
Поэтому я пытался создать приложение, которое использует сокет.ввод-вывод для обмена сообщениями и экспресс-маршрутов для обработки регулярных http-запросов . Проблема в том, что http-вызовы на эти маршруты не выполняются, и я получаю сокет.ошибка ввода-вывода, как показано ниже
{
"code": 0,
"message": "Transport unknown"
}
то, как я реализовал экспресс-сервер и сокет.ио-это
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
app.set("socketio", io);
настройте маршрут под названием /чат (так как я настроил сокет на прослушивание /чат)
router.get("/chat", function () {
}
export default router;
и это должно предотвратить прослушивание сокета на других маршрутах, что позволит вам выполнять http-запросы на других маршрутах.