无法将我的静态 javascript 文件连接到 NodeJS 和 ExpressJS 中的 socket.io 库

Can't connect my static javascript file to socket.io library in NodeJS and ExpressJS

提问人:ritik mittal 提问时间:11/9/2023 更新时间:11/9/2023 访问量:17

问:

我正在使用 nodejs、expressjs 和 这是我的索引.js

const express = require("express");
const app = express();
const path = require("path");
const router = require("./controller/routes");
const server = require("http").createServer(app);
const io = require("socket.io")(server, {
  path: "/socket.io", // Add this line to specify the path
});
port = 4000;

app.set("view engine", "ejs");
app.use("/", router.router);
app.use(
  "/socket.io",
  express.static(path.join(__dirname, "node_modules/socket.io/client-dist"))
);

app.use("/public", express.static(path.join(__dirname, "public")));
// app.use(express.static(path.join(__dirname, 'public')));

io.on("connection", (socket) => {
  console.log("A user connected");

  socket.on("join-room", () => {
    console.log("Joined the room");
  });

  socket.on("disconnect", () => {
    console.log("User disconnected");
  });
});

app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

我已经在我的 .ejs 文件中配置了套接字。我正在从我的脚本.js发出一个事件,而我在io.on()中的控制台没有打印。

我的脚本.js在公共文件夹中。

const socket = io();
const videoGrid = document.getElementById("video-grid");
console.log(videoGrid);
const myVideo = document.createElement("video");
myVideo.muted = true;

let myVideoStream;

navigator.mediaDevices
  .getUserMedia({
    video: true,
    audio: true,
  })
  .then((stream) => {
    myVideoStream = stream;
    addVideoStream(myVideo, stream);
    socket.emit("join-room");
  })
  .catch((err) => {
    console.error("Error accessing media devices: ", err);
  });

期待我的主机被打印出来

JavaScript 节点.js Express 调试 socket.io

评论

0赞 Mahammed Sarfaraz Nawaz Pagala 11/9/2023
你能分享你的ejs文件吗?确保在ejs中包含此标记<script src=“/socket.io/socket.io.js”></script>和此<script src=“/public/script.js”></script>
0赞 ritik mittal 11/9/2023
是的,我已经包含了这两个文件。我正在使用路由器,我的路由位于不同的位置。这会是一个问题吗?'/create-room' 这是呈现 ejs 文件的路由。

答: 暂无答案