You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

验证方法

  1. 重启Node.js服务
  2. 访问http://localhost:3000,打开浏览器控制台确认不再出现404错误
  3. 检查socket.io.js是否成功加载,io对象是否能正常初始化

内容的提问来源于stack exchange,提问作者cool66

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:50:29