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

Express框架下app.use()无法记录入站请求问题排查咨询

为什么我的Express API调用日志没有被记录?

嘿,我一眼就发现问题所在了——你的中间件配置有两个关键疏漏,导致日志完全没机会执行:

1. 中间件顺序搞反了

Express的中间件和路由是按注册顺序依次匹配执行的。你现在先挂载了API路由app.use(require('./routes/apis'));,之后才加了/api的日志中间件。这意味着当/api开头的请求过来时,会先被前面的API路由处理(路由会发送响应结束请求),后面的日志中间件根本轮不上运行。

2. 中间件没有调用next()

就算顺序调对了,当前的日志中间件里没写next(),请求会直接被挂在这里——既不会把请求传递到后续路由,也没法给客户端返回响应。不过你说API能正常调用,说明这不是当前的核心问题,但也是必须修复的点。

修复后的代码示例

把日志中间件移到路由挂载之前,并且加上next()调用:

const logger = require('./config');
const app = express();

// 先挂载日志中间件,确保所有/api请求先经过这里
app.use('/api', (req, res, next) => {
  logger.info('in /api call');
  // 调用next()让请求继续传递到后续的路由处理函数
  next();
});

// 再挂载API路由
app.use(require('./routes/apis'));

额外提示

如果你的API路由里还有非/api开头的路径,你可以把日志中间件的前缀去掉,改成app.use((req, res, next) => {...})来记录所有请求。但根据你当前的代码结构,上面的修改应该就能解决日志不记录的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:47:32