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