坑所属项目 ↗2026-10-03

compression 错误包装原生 createServer 导致 listen 崩溃

给原生 node:http createServer 加 gzip 时误用 compression(createServer(...)) 包装,返回的不是 HTTP Server,导致 server.listen is not a function 崩溃;随后又引入多余右括号语法错误,连修 2 单。

  • Node
  • gzip
  • compression
  • 排错

现象

工单 029 给 server/index.js 加 gzip 压缩后,重启 server 报 TypeError: server.listen is not a function(第 431 行),随后修复时又删错括号,出现 SyntaxError: Unexpected token ')'(第 417 行),服务连续两轮起不来。

根因

  • compression 是 Express 中间件,正确用法是 app.use(compression()),不能用来包装原生 node:http 的 createServer(...)——包装后返回值不是 HTTP Server 实例,自然没有 .listen() 方法
  • 项目实际用的是原生 http 模块,不是 Express;原生 http 本身不带 gzip,需要手动写 zlib 中间件或换框架

修复

  1. 删除 import compression,改回 createServer(...) 直接返回服务器实例
  2. 修正多余右括号 })) → })
  3. node --check index.js 语法检查通过后重启,3081 恢复 200

注意

  • 给 server 加中间件前先确认它是 Express 还是原生 http,用法完全不同
  • 修复后先 node --check 再重启,别裸奔