分类: Express

next函数在Express Router中的应用

例1

运行结果:
Hello!

运行结果:
Hello!
World!

上述例子说明了,next函数的作用是调用挂载在同一路径下的下一个中间函数。换而言之,如果没有next(),这一次request的处理过程就结束了。

例2

换一种写法:

无next函数运行结果:
Hello!

有next函数运行结果:
Hello!
World!

解释

需要说明的是,Express文档中出现了很多次middleware这个词。其本义为中间件,未免太大了,在这里译作中间函数。

中间函数栈是开发者把许多中间函数按一定顺序组织起来的,新收到的请求被开发者定义的第一个中间函数接收并处理,随后被传给下一个中间函数,直到栈底,就像一个自来水管道一样。这也正是为何在Express文档中,next函数的作用被描述为control flow。

Express中的文档中写到:
app.use函数的参数function,可以接受单个函数,多个函数,函数数组,以及混用上述三种形式。这是中间函数栈的一种组成方式,如例2。另一种组织方式为重复多次调用app.use函数来挂载同一路径下的多个函数,如例1。

因此可见,重复多次调用app.use函数来挂载同一路径下的多个函数,与使用多参数传入函数,效果相同。另外,例2又一次佐证了next函数的作用,即传递给控制权给挂载在当前路径的中间函数栈的下一个函数。