【问题标题】:Is middleware a NodeJS or ExpressJS (or similar) concept?中间件是 NodeJS 还是 ExpressJS(或类似)概念?
【发布时间】:2020-12-13 13:07:26
【问题描述】:

我不断看到解释 NodeJS 中的中间件概念的问题,但在我看来,它们的表述总是很糟糕。人们总是说 ExpressJS 中间件,还是有在纯 NodeJS 中使用这个概念的实践?

我查看了 herehere 等不同的抽象解释,我完全理解,这个概念存在于 NodeJS 和 Express 之外。我很好奇 NodeJS 中间件是否总是被理解为由 Express 或其他库实现的中间件,或者 NodeJS 本身具有内置的概念。

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

    不,纯 Node.js 中不存在中间件(至少在我们习惯于看到它们的方式中),这个概念来自 Express.js 的 Node.js。但是没有人禁止你在 Node.js 中编写自己的实现,你需要从下一个函数开始,它负责所有的中间件。这个函数的要点是它应该在最后被调用,或者终止进程或者将对象 req/res 传递给下一个中间件。实现可见here

    【讨论】:

    • 也是我的理解
    【解决方案2】:

    您的参考资料中提到的中间件与 nodejs / express 中间件的类别不同。

    在 express 中,中间件是具有此签名的 Javascript 函数的名称(我认为这是一个夸张的名称)。

    function mWare (req, res, next) {
      /* do something useful with req and res */
      next()
    }
    

    这些 express 中间件函数由 express 框架调用,通常在 .get() 或其他处理每个特定请求的函数之前调用。 中间件这个概念来自express框架,而不是nodejs本身。

    其他基于 nodejs 构建的 web 框架有其他拦截请求的方式。例如,hapi 使用服务器扩展点。

    您的参考资料中提到的中间件根本不是一回事。它由较大的组件组成。队列、负载平衡、数据库访问、日志记录和缓存系统都是这种中间件的例子。根据该定义,您可以证明您的整个 express / nodejs / Linux 服务器都是中间件。位于您的 nodejs 程序和网络之间的 nginx 反向代理服务器绝对是那种中间件。

    【讨论】:

    • 感谢您的回答。我不确定它是否真的回答了我的问题。我会引用它,这样它可能会更好地阐明我的意思 - “我完全理解,这个概念存在于 NodeJS 和 Express 之外。我很好奇 NodeJS 中间件是否总是被理解为由 Express 或另一个库实现的中间件, 或者 NodeJS 本身就内置了这个概念。”
    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2012-07-26
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多