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

为什么Express中间件数组第一个需调用next()而第二个不需要

核心原因

你提到的第二个“中间件”是express-validator库提供的校验中间件,和你自己编写的第一个自定义中间件实现逻辑不同:

  • 自定义编写的第一个中间件,需要手动调用next()才能将请求传递给下一个中间件处理,这是Express自定义中间件的标准规则:如果当前中间件没有结束请求响应流程,就必须调用next()把控制权交给下一个中间件,否则请求会被直接挂起。
  • express-validator的body()方法返回的是已经封装完成的中间件函数,库内部已经实现了next()的调用逻辑,不需要手动编写:校验和参数清理逻辑执行完成后会自动调用next()把请求传递给下一个中间件,只有校验过程出现异常才会直接把异常传给错误处理中间件。

你可以把body(xxx).trim().isLength()这类调用的返回值,等价理解为如下格式的中间件:

(req, res, next) => {
  // 内部已实现对应校验、参数清理逻辑
  // 执行完成后自动调用next()
  next()
}

因此不需要额外手动添加next()调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:01