为什么Express会自动在控制台打印Server对象?如何关闭该功能?
Express 官方原生版本不存在自动打印Server实例的默认功能,你看到的输出是其他链路的打印逻辑导致的,可按以下路径排查解决:
- 检查
app.listen调用代码app.listen方法的返回值就是你贴出的Node.js原生http.Server实例,若你写了类似console.log(app.listen(端口号))的代码,直接把返回值传给了打印方法,就会输出这段内容。修正写法即可:
// 错误写法:会打印Server对象 console.log(app.listen(3000, () => { console.log('服务启动成功') })) // 正确写法 app.listen(3000, () => { console.log('服务启动成功') })
- 排查开发工具/中间件配置
如果你使用了nodemon、ts-node-dev这类热重载启动工具,或是项目引入了morgan、debug这类日志中间件,检查是否开启了过高的调试日志级别:比如debug包设置了express:*的全局过滤规则、脚手架默认开了开发环境全量调试输出,关闭对应调试开关即可。 - 排查第三方扩展插件
部分Express生态的脚手架、扩展插件会默认打印内部实例用于开发调试,可检查你引入的第三方Express相关依赖的配置项,关闭调试输出开关。 - 临时过滤方案
如果暂时找不到打印源头,可以在项目入口文件最顶部添加以下代码,直接过滤掉匹配特征的Server对象输出:
const originalLog = console.log console.log = function (...args) { if (args.length && typeof args[0] === 'string' && args[0].startsWith('Server {')) { return } originalLog.apply(console, args) }
内容的提问来源于stack exchange,提问作者Kodzvn
相关产品推荐
相关产品推荐

