Javascript express.js的确切性质;下一步();参数

Javascript express.js的确切性质;下一步();参数,javascript,node.js,express,Javascript,Node.js,Express,我对express.js非常陌生,正在阅读文档。我知道express middleware中的next参数的目的是调用给定路由的后续中间件函数。我假设next()是在expressAPI中定义的函数。但是,文件中明确指出: 注意上面对next()的调用。调用此函数将调用应用程序中的下一个中间件函数。next()函数不是Node.js或Express API的一部分,而是传递给中间件函数的第三个参数。next()函数可以被命名为任何名称,但按照惯例,它总是被命名为“next”。为避免混淆,请始终

我对express.js非常陌生,正在阅读文档。我知道express middleware中的next参数的目的是调用给定路由的后续中间件函数。我假设next()是在expressAPI中定义的函数。但是,文件中明确指出:

注意上面对next()的调用。调用此函数将调用应用程序中的下一个中间件函数。next()函数不是Node.js或Express API的一部分,而是传递给中间件函数的第三个参数。next()函数可以被命名为任何名称,但按照惯例,它总是被命名为“next”。为避免混淆,请始终使用此约定

让我困惑的是,next似乎没有在任何地方定义它,因此声称它不是API的一部分是奇怪的。我能想到的唯一一件事是,express会自动重写next作为后台的后续中间件函数(将其作为第三个参数传递给第一个中间件回调函数)


我的问题本质上是这样的——我知道next做什么,但具体是什么?

参数
next
是Express提供的回调。它是一个接受一个参数的函数,该参数指示是否应继续执行下一个中间件函数

如果将非空/非未定义的值传递给
next
,则表示出现错误,不会进行进一步处理

如果未传递任何参数或
null
,则Express将继续执行下一步操作

为了回答您的问题,
next
是一个由Express提供的回调函数,它控制Express何时进入下一步。它的实现是内部的

请注意,如果您的中间件正在完成请求(比如通过调用
res.json(“done!”)
),那么您根本不需要调用
next
,因为没有其他事情要做


正如您所注意到的,函数的名称在这一点上是本地的,可以调用任何东西,但通常称为
next

在这里完全是迂腐的,但是有一种特殊情况,将值传递给
next
并不表示错误,即
next('route')
。是的,“route”和“router”是特殊参数,用于控制在使用多个路由器的情况下Express control继续的位置。它们并不表示有错误。