IO 未定义 - Socket.io

IO Is Not Defined - Socket.io

我目前正在开发一个实时聊天网页。我最初考虑使用 PHP,但正在为后端测试 socket.io

我 运行 遇到浏览器控制台记录 Uncaught ReferenceError: io is not defined 的问题。我已经在这个网站和其他网站上多次查看过这个问题,大多数答案都说要确保你的 <script> 标签有 src 指向 http://localhost:3000/socket.io/socket.io.js 而不是只是 /socket.io/socket.io.js。我的 HTML 代码中已经有了这个。这是代码片段:

index.html

<!DOCTYPE html>
<html lang="en-us">

<head>
  <title>Chat</title>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="style.css" type="text/css" />
  <script type="text/javascript" src="../libs/jquery.js"></script>
  <script src="../libs/fontawesome.js" crossorigin="anonymous"></script>
  <script defer src="http://localhost:3000/socket.io/socket.io.js"></script>
</head>

<body>
  <!-- My code here -->

  <script type="text/javascript" src="script.js"></script>
</body>

</html>

script.js

const socket = io("http://localhost:3000");

socket.on("chat-message", (data) => {
  console.log(data);
});

server.js

const io = require("socket.io")(3000);

io.on("connection", (socket) => {
  socket.emit("chat-message", "Hello World!");
});

基本上,现在它应该做的就是当用户连接到页面时,服务器向客户端发送一个带有Hello World!data的请求。然后客户端只是console.log()这个数据。

我在 BROWSER 控制台中收到 Uncaught ReferenceError: io is not defined 错误,它说问题出在第一行的 script.js 中:const socket = io("http://localhost:3000");.

提前谢谢你。感谢您提供任何帮助。

socket.io <script> 标签有一个 defer 属性,这意味着它将在文档被解析后 运行。这意味着它在 script.js 之后 运行s,不会延迟。要解决此问题,只需将 defer 属性添加到 script.js <script> 标记,作为延迟脚本 运行 按照它们定义的顺序。