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

Express中同路由app.use致中间件重复调用的问题及解决方法

关于express.urlencoded中间件重复调用的问题解答

1. 针对/login2路由,express.urlencoded会被调用两次吗?

是的,会被调用两次。原因如下:

  • 第一行的app.use(express.urlencoded({ extended: false }))是全局中间件,会匹配所有进入服务器的请求,包括发往/login2的请求,这是第一次调用。
  • 第二行的app.use("/login2", [express.urlencoded({ extended: false }), moduleValidation])是路由级中间件,当请求匹配/login2路径时,会依次执行数组内的中间件,这里的express.urlencoded就是第二次调用。

重复调用虽不会直接引发程序报错,但属于冗余操作,会额外消耗服务器资源,建议避免。

2. 如何避免重复调用?

有两种实用的解决方案:

方案一:保留全局中间件,移除路由内的重复配置

既然全局中间件已经能处理所有请求的urlencoded格式解析,/login2路由无需再单独配置一次,修改后的代码如下:

app.use(express.urlencoded({ extended: false }));
app.use("/login2", moduleValidation);

方案二:移除全局中间件,仅在需要的路由配置

如果服务器只有部分路由需要解析urlencoded格式的请求体,可以去掉全局中间件配置,只在特定路由(比如/login2)中添加该中间件,代码如下:

app.use("/login2", [express.urlencoded({ extended: false }), moduleValidation]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:05