我目前正在开发一个实时聊天网页。我最初考虑使用 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);
});
服务器.js
const io = require("socket.io")(3000);
io.on("connection", (socket) => {
socket.emit("chat-message", "Hello World!");
});
基本上,它现在要做的就是当用户连接到页面时,服务器向客户端发送带有
data
的 Hello World!
的请求。然后客户端只需console.log()
此数据。
我在浏览器控制台中收到
Uncaught ReferenceError: io is not defined
错误,它表示问题出在第一行的 script.js
中:const socket = io("http://localhost:3000");
。
提前谢谢您。感谢任何和所有的帮助。
socket.io
<script>
标签有一个 defer
属性,这意味着它将在解析文档后运行。这意味着它在 script.js 之后运行,不会被延迟。要解决此问题,只需向 script.js defer
标记添加 <script>
属性,因为延迟脚本按照定义的顺序运行。
只需删除 defer 属性,(Uncaught ReferenceError: io is not Defined) 的结果是未能使用正确的语法为 socket.io-client 正确定义脚本初始化。例如:
正确的语法,
语法错误, 1) 2) src="socket.io/socket.io.js"