【问题标题】:Who provides the next() function in Express middleware?谁在 Express 中间件中提供 next() 函数?
【发布时间】:2015-02-11 21:42:04
【问题描述】:

我对 next() 在 Node.js 和 Express 中间件中的工作方式感到困惑。

还有一些关于中间件工作的其他问题,for example here,但我正在寻找不同的答案。

困扰我的主要问题是,谁在提供next() 功能?

例如,在我的标准生成的express 应用程序中,我得到了以下代码:

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

但是谁调用了这个函数,它提供的next() 的本质是什么?我怎么知道next() 会是什么样子?我不知道 next() 做什么。

【问题讨论】:

  • 这只是一个回调。当你执行next 时,你告诉 express 你已经完成了,它应该继续下一个中间件,或者处理任何传入的错误。
  • “谁在提供 next() 函数” Expressjs 是。它在那里,以便您可以指示该中间件何时执行完毕。
  • @KevinB 那你为什么不通过下一个中间件旁边的回调,比如next(req, res, myNextFunc);
  • 您为什么需要这样做?每个中间件不应该关心接下来会调用什么中间件或调用所说的下一个中间件的结果是什么。 Express 已经为下一个中间件提供了适当的 req res 和 next 参数。

标签: javascript node.js express middleware


【解决方案1】:

Express 应用程序本质上是一系列中间件调用。

中间件是一个可以访问请求对象(req)的函数, 响应对象 (res),以及中的下一个中间件 Express 应用程序的请求-响应周期,通常表示为 一个名为 next 的变量。

如上所述,Expressjs 提供了下一个回调函数。 Next 只是调用流程中下一个中间件的一种方式。

有关许多示例,请参阅 Express 的 Using middleware

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多