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

