在Node.js Express中 - 使用app.use函数 -
为什么我不必这样做:
app.use(function(req,res,next){
//do something here
next(req,res);
});
Run Code Online (Sandbox Code Playgroud)
通常我只是这样做而且有效
app.use(function(req,res,next){
//do something here
next();
});
Run Code Online (Sandbox Code Playgroud)
?
next()已经知道的req和res当前正在执行的请求,因此你只需直接调用它.它是为此请求创建的唯一函数.它还会跟踪您当前在中间件堆栈中的位置,以便调用next()执行链中的下一个中间件.
如果你查看路由器的快速源代码,你实际上可以看到本地定义的next()函数,并且可以看到它如何访问一堆包含的闭包定义变量req,res以及它用于推进中间件堆栈的索引计数器和一堆其他变量.因此,它已经可以访问启动下一个中间件调用所需的一切,因此没有理由将它传递给那些东西.
仅供参考,使用开源的一个好处是,您可以随时自己查看代码,看看代码的作用.
调用时next(),您有以下几种选择:
您可以调用它next(),这将只调用堆栈中的下一个中间件处理程序.
您可以调用它next('route'),它将跳到下一个路由处理程序.
next(err)除错误处理程序外,您可以传递错误并停止所有进一步的中间件或路由器处理.
详细信息请参见此处:http://expressjs.com/guide/error-handling.html.
这是该页面的注释:
next()并且next(err)类似于Promise.resolve()和Promise.reject().它们允许您向Express发出信号,表示此当前处理程序已完成并处于何种状态.next(err)将跳过链中的所有剩余处理程序,除了那些设置为处理错误的处理程序,如下一节所述.
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |