gpt4 book ai didi

node.js - "Everything is middleware"

转载 作者:搜寻专家 更新时间:2023-10-31 22:27:25 29 4
gpt4 key购买 nike

我正在学习 Koa JS 来构建小型 Web 应用程序的服务器端部分。在观看 youtube 教程和阅读指南时,我看到了一句话:“Everything is middleware [in Koa]”。

我已经阅读了关于中间件的维基百科文章并在谷歌上搜索了该术语,我对什么是中间件有一个粗略的了解(介于非常低级别的东西和高级编程之间的中间层)。但我不明白“一切都是中间件”的说法在 Web 应用程序和 NodeJS 的上下文中意味着什么,以及为什么这是相关的。

最佳答案

您可以将 Web 应用程序请求视为管道。管道由管道组成,每次您认为合适时,您都可以非常轻松地向管道添加新管道。

现在想象一下,您添加到管道中的每根管道都能够对流经管道的流体执行一些特殊操作。例如,如果水是流经管道的流体,您可以添加一个管道来过滤任何污垢和杂质,然后您可以添加一个将水加热到 80C 的管道,然后您可以添加一个向管道中添加奶粉的管道水,然后添加另一个管道,向其中添加巧克力粉,在管道的末端,您会得到巧克力牛奶。

好吧,想象一下同样的事情,但是随着你的进行,流体就是你的 http 请求,你可以在你添加到你的管道的每个管道(即中间件)中对你的请求做各种各样的事情,在这样一个下一个管道将获得修改/改进请求的方式。随着您的进行,您可以逐渐构建您的 http 响应,这是您希望在管道的另一端出现的内容。

例如,您的请求正文可能已加密,因此您可以向管道添加解密管道,以便管道中的下一个管道可以处理解密的请求。其他管道可以查找查询参数并将它们放入哈希中,其他管道可以查找表单参数并执行相同操作,其他管道可以提取 header 值,处理 cookie 的管道呢?等等。

因此,您可以看到您可以轻松地向管道中添加越来越多的管道,每个管道都在做前一个管道没有做的事情。随着您的前进,您可以使用越来越多的信息改进请求,这有助于您最终构建响应以发送回客户端。

其中一些管道可用于拒绝请求,例如,在 REST API 中,您可以在开头添加一个管道,用于检查请求中发送的 API key ,如果无效,则立即丢弃该请求,并且否则将请求发送到管道。

所以你可以看到一些管道作为过滤器工作,决定哪些请求必须被处理,哪些应该被丢弃或终止。其他管道可以充当转换器,通过向请求添加更多数据或更改其中的数据来更改请求,然后将其传递给管道中的下一个管道。一些管道是路由器,即具有单个入口点但具有多个导出点的管道;这种类型的管道可以根据其内容(即路径、内容类型、接受的语言等)通过不同的管道发送请求。最后,一些管道是终端,这意味着当您到达它们时,您就在管道的末端,您应该在那里提供响应,无论成功与否。

很多 web 框架都是这样工作的,不仅仅是 Koa。 Koa 由 Express 的相同创建者开发,后者以类似的方式工作,因此他们在 Koa 中重用 Expeess 的最佳创意是很自然的。然而,早期的框架(如 Java Servlet)可以使用称为过滤器的概念以类似的方式工作。所以,这不是新的,可能只是术语。

关于node.js - "Everything is middleware",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980325/

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