HTTP-маршруты не вызываются при инициализации SocketIO

#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-запросы на других маршрутах.