在 Express 中 next() 接受啥参数

Posted

技术标签:

【中文标题】在 Express 中 next() 接受啥参数【英文标题】:What parameters does next() take in Express在 Express 中 next() 接受什么参数 【发布时间】:2018-12-31 10:29:27 【问题描述】:

感谢 Express.js,我目前正在构建一个 API,但我仍然无法相信它有多神奇。我弄清楚了如何使用中间件,处理请求和响应,如何进入下一个中间件……但是有一些东西让我很受触动,那就是next()

我知道next() 是什么,我只是想不通next() 可以采用什么样的参数,以及它们会做什么。一开始我以为是给下一个中间件传数据,结果我错了,这个有req.locals

有人能告诉我吗?

【问题讨论】:

你见过***.com/questions/10695629/… 吗? 我有,但在其中输入错误并没有真正帮助我,我想知道我们可以在其中放入什么样的 pf 参数以及用于什么 【参考方案1】:

您有三种选择拨打next()

1.继续路由。 如果您只想继续路由到链中与此路由匹配的下一个路由处理程序,那么您只需不带参数调用它:

next();

这在中间件中最常用:

app.use((req, res, next) => 
    // set an item in the session and then continue routing
    req.session.xxx = "foo";
    next();
);

2。将错误中止路由到您的集中式错误处理程序。 如果您想设置错误并让路由跳到您的通用错误处理程序,那么您可以传递一个错误:

next(new Error("timeout contacting database"));

然后,这将调用您的一般错误处理路由并将特定错误传递给您的一般错误处理代码可以决定做什么。这使您可以将错误处理响应代码集中在一个地方。使用next(err) 的示例是here。

您可以查看the doc for generalized error handling in Express 了解其工作原理的示例。

3.跳过此路由器中的路由处理程序,继续其他路由器中的路由。如果您想跳过当前路由器中的所有路由处理程序,但继续处理可能已注册的任何其他路由,那么您可以这样做:

next('route');

来自文档:

您可以提供多个回调函数,其行为类似于中间件,除了这些回调可以调用next('route') 以绕过剩余的路由回调。您可以使用此机制对路由施加先决条件,然后如果没有理由继续当前路由,则将控制权传递给后续路由。

如果你在this page of the doc上反复搜索“next(”,你会发现很多例子。here in the doc有一个这种用法的例子。


仅供参考,Express 5 可能会为 next() 添加一些新用途,因为它可能会返回一个承诺,让您知道何时完成路由。

【讨论】:

谢谢你,正是我需要知道的!

以上是关于在 Express 中 next() 接受啥参数的主要内容,如果未能解决你的问题,请参考以下文章

精华 对express中next函数的一些理解

使用 Express 服务器将多个参数传递给 Next.js 自定义 URL

SQL Server 2014 Express (x64),是啥版本的?express是啥意思?

如何使用 Express.js 指定 HTTP 错误代码?

在 Next.js 使用 connect 中间件

SQL Server 2014 Express (x64),是啥版本的?express是啥意思?