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

Socket.io服务器启动失败:TypeError: Server不是构造函数

问题:Express结合Socket.io启动时报错TypeError: Server is not a constructor

我正尝试结合Express.js运行Socket.io,以下是我的server.js代码:

const express = require("express");
const app = express();
const http = require("http");
const cors = require("cors");
const Server = require("socket.io");

app.use(cors());
const server = http.createServer(app);

const io = new Server(server, {
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST"],
  },
});

io.on("connection", (socket) => {
  console.log(`User connected: ${socket.id}`);
  socket.on("Disconnect", () => {
    console.log(`User disconnected: ${socket.id}`);
  });
});

server.listen(3000, () => {
  console.log("SERVER WALKING");
});

运行nodemon server.js后出现如下报错:

const io = new Server(server, {
           ^

TypeError: Server is not a constructor
    at Object.<anonymous> (Path:10:12)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Module._load (node:internal/modules/cjs/loader:827:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47

Node.js v18.0.0
[nodemon] app crashed - waiting for file changes before starting...

我已经尝试用npm和yarn删除并重新安装node_modules,但报错仍未解决,请问哪里操作有误?


解决方案
  • 核心问题是Socket.io的导入方式错误:Socket.io v3及以上版本的CommonJS模块中,Server是命名导出,不是默认导出。你当前的写法const Server = require("socket.io");拿到的是整个模块对象,不是构造函数,所以会报错Server is not a constructor。需要改成命名导入:

    const { Server } = require("socket.io");
    

    或者:

    const Server = require("socket.io").Server;
    
  • 另外还有一个隐性问题:Socket.io的断开连接事件名是小写的disconnect,你代码里写的是大写的Disconnect,这个事件不会被触发,需要修正。

修正后的完整代码:

const express = require("express");
const app = express();
const http = require("http");
const cors = require("cors");
const { Server } = require("socket.io");

app.use(cors());
const server = http.createServer(app);

const io = new Server(server, {
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST"],
  },
});

io.on("connection", (socket) => {
  console.log(`User connected: ${socket.id}`);
  socket.on("disconnect", () => {
    console.log(`User disconnected: ${socket.id}`);
  });
});

server.listen(3000, () => {
  console.log("SERVER RUNNING");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:05:20