Socket.io 404错误及io未定义问题求助(Node.js环境)
解决Socket.io应用中
socket.io.js 404及io is not defined错误 出现的错误信息:
GET /socket.io/socket.io.js net::ERR_ABORTED 404 Refused to execute script from '/socket.io/socket.io.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled. Uncaught ReferenceError: io is not defined at script.js:1:14
问题根源
你的代码中Socket.io绑定在server对象(由http.createServer(app)创建)上,但最后启动服务用的是app.listen(3000)——这会创建一个全新的HTTP服务器实例,而非Socket.io绑定的那个。导致Socket.io自动注册的/socket.io/静态资源路由未生效,客户端无法获取socket.io.js文件,进而触发后续的MIME类型错误和io is not defined错误。
修复方案
修改index.js的最后一行,把app.listen(3000)替换为server.listen(3000),确保启动的是Socket.io绑定的服务器实例:
var express = require("express"); var app = express(); var http = require("http"); var server = http.createServer(app); var { Server } = require("socket.io"); var io = new Server(server); app.get("/", (req, res) => { res.sendFile(__dirname + "/index.html"); }); app.get("/style.css", (req, res) => { res.sendFile(__dirname + "/style.css"); }); app.get("/script.js", (req, res) => { res.sendFile(__dirname + "/script.js"); }); io.on("connection", (socket) => { socket.on("chat message", (msg) => { io.emit("chat message", msg); }); }); // 替换为server.listen,而非app.listen server.listen(3000);
验证方法
- 重启Node.js服务
- 访问
http://localhost:3000,打开浏览器控制台确认不再出现404错误 - 检查
socket.io.js是否成功加载,io对象是否能正常初始化
内容的提问来源于stack exchange,提问作者cool66
相关产品推荐
相关产品推荐

