gpt4 book ai didi

Node.js Express - next() 回调

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:18 25 4
gpt4 key购买 nike

在 Node.js Express 中 - 使用 app.use 函数 -

为什么我不必这样做:

app.use(function(req,res,next){
//do something here
next(req,res);
});

通常我只是这样做并且有效

app.use(function(req,res,next){
//do something here
next();
});

最佳答案

next() 已经知道当前正在执行的请求的 reqres,因此您只需直接调用它即可。这是专门为此请求而创建的独特功能。它还会跟踪您当前在中间件堆栈中的位置,以便调用 next() 执行链中的下一个中间件。

如果你看express source code for the router ,您实际上可以看到本地定义的 next() 函数,并可以看到它如何访问一堆闭包定义的变量,包括 reqres 和索引计数器,用于推进中间件堆栈和一堆其他变量。因此,它已经可以访问启动下一个中间件调用所需的所有内容,因此没有理由向其传递这些内容。

仅供引用,使用开源的好处之一是您始终可以自己查看代码并了解它的作用。

调用next()时,您有多种选择:

  1. 您可以将其作为 next() 调用,这只会调用堆栈中的下一个中间件处理程序。

  2. 您可以将其调用为 next('route'),它将跳到下一个路由处理程序。

  3. 您可以传递错误 next(err) 并停止所有进一步的中间件或路由器处理(错误处理程序除外)。

详细信息记录在此处:http://expressjs.com/guide/error-handling.html .

这是该页面的注释:

next() and next(err) are analogous to Promise.resolve() and Promise.reject(). They allow you to signal to Express that this current handler is complete and in what state. next(err) will skip all remaining handlers in the chain except for those that are set up to handle errors as described in the next section.

关于Node.js Express - next() 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com