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
相关产品推荐
相关产品推荐

