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 中间件或换框架
修复
- 删除
import compression,改回createServer(...)直接返回服务器实例 - 修正多余右括号
}))→}) node --check index.js语法检查通过后重启,3081 恢复 200
注意
- 给 server 加中间件前先确认它是 Express 还是原生 http,用法完全不同
- 修复后先
node --check再重启,别裸奔