我正在学习Koa JS,用于构建小型Web应用程序的服务器端部分。看着youtube教程和阅读指南,我看到了句子:"一切都是中间件[在Koa]。"
我已经阅读了维基百科有关中间件的文章并搜索了这个术语,我对中间件是什么有一个粗略的了解(在非常低级别的东西和高级编程之间的中间层)。但是我不明白什么是“一切都是中间件"表示在Web应用程序和NodeJS的上下文中以及为什么这是相关的。
答案 0 :(得分:15)
您可以将Web应用程序请求视为管道。管道由管道组成,每当您认为合适时,您就可以非常轻松地将新管道添加到管道中。
现在想象一下,您添加到管道中的每根管道都能够对流过管道的流体做出特殊处理。例如,如果水是流过管道的流体,你可以添加一个过滤任何污垢和杂质的管道,然后你可以添加一个管道,将水加热到80C,然后你可以添加一个管道,添加粉末牛奶到水,然后添加另一个添加粉末巧克力的管道,在管道的末端,你会得到巧克力牛奶。
好吧,想象一下同样的事情,但是当你走的时候,流量就是你的http请求,你可以在你添加到管道的每个管道(即中间件)中为你的请求做各种各样的事情。下一个管道将获得修改/改进的请求的方式。随着时间的推移,您可以逐步构建您的http响应,这是您期望在管道的另一端出现的。
例如,您的请求正文可能会加密,因此您可以向管道添加解密管道,以便管道中的下一个管道可以使用解密的请求。其他管道可以查找查询参数并将它们放在哈希中,其他管道可以查找表单参数并执行相同的操作,其他管道可以提取标题值,如何处理cookie?等等。
因此,您可以看到您可以轻松地向管道中添加越来越多的管道,每个管道都会执行前一个管道不执行的操作。随着时间的推移,您可以使用越来越多的信息来改进请求,这有助于您最终构建响应以发送回客户端。
其中一些管道可用于拒绝请求,例如,在REST API中,您可以在开头添加管道来检查请求中发送的API密钥,如果无效,则立即丢弃该请求,并且否则将请求发送到管道。
因此,您可以看到一些管道用作过滤器,用于决定必须处理哪些请求以及哪些请求应被丢弃或终止。其他管道可以充当变换器,通过向其添加更多数据或更改其中的数据来更改请求,然后将其传递到管道中的下一个管道。有些管道是路由器,这是一个具有单个入口点但有许多出口点的管道;这种类型的管道可以根据其内容(即路径,内容类型,接受的语言等等)通过不同的管道发送请求。最后,有些管道是终端,这意味着当你到达它们时,你就在管道的尽头,你应该在那里提供响应,无论是否成功。
许多Web框架都以这种方式工作,而不仅仅是Koa。 Koa由Express的相同创建者开发,后者以类似的方式工作,因此他们重复使用来自Koa的Expeess的最佳创意是很自然的。然而,像Java Servlets这样的早期框架可以使用称为过滤器的概念以类似的方式工作。所以,这不是新的,可能只是术语。
答案 1 :(得分:0)
在下面的回答Is EJB middleware? Or is middleware used in EJB?中,根据UNIX哲学我对中间件的解释进行了标记:编写程序来处理文本流,因为这是一个通用接口
中间件可以处理程序之间的所有文本流。
Koa所说的是每个Koa对象都可以通过通用接口与其他所有Koa对象进行通信。 (但我怀疑它是一个文本流。它可能是JSON。或两者兼而有之)
答案 2 :(得分:0)
答案 3 :(得分:-1)
是中间件服务器介绍的页面。我们可以在客户端和业务逻辑之间使用中间层作为服务器,以提供抽象,安全性,HA和负载平衡以及EJB支持,Servlet容器等更多功能。
https://www.applicationproductionsupport.com/p/middleware-servers.html