当前位置: 首页 > 网络应用技术

新手也可以理解的KOA2.0源代码系列

时间:2023-03-07 18:55:38 网络应用技术

  KOA认为每个人都有或多或少的联系。即使没有使用KOA的人,也肯定会听到洋葱模型的概念。TODAY的目标是用手为您带来KOA2。

  前两章的想法是从使用级别和操作结果中推出源代码。我觉得替换感将更强。最后一章根据官方文档和源代码完全实施。

  旧规则,首先问几个问题

  接下来,我们将在实施过程中逐一解决这些问题!

  首先观察KOA的最简单演示

  首先观察代码结构

  结合上述两个结论,可以推断出KOA中的结构可能是这样

  然后查看运行结果

  app.listen(8889,'0.0.0.0',()=> {console.log()})// node koa.js->启动成功8889 // Postman request-> 1

  然后查看运行结果

  因此,与上述结论相结合,我们可以实现刚刚编写的最简单的演示。代码如下

  核实

  多个中间件中最简单的演示的源代码已经完成,但是当您编写KOA时,将会有很多插头,自定义的拦截器,例如各种拦截器。但是就这些中间件的特定逻辑而言,他们执行顺序不过是两种类型的同步和异步。因此,区分这两种情况,观察代码结构并运行结果,然后逐步进行分析,最后得出源代码。

  同步

  观察上述代码结构和操作结果(这次需要与操作结果结合进行分析,因此不会拆分)

  首先,根据1和2结论,可以获得以下代码

  第三点更加复杂。为了更好地分析,我们可以在JS中编写使用守则。

  整个部分都是暂时的,无论CTX如何

  结合JS代码和上图,我们如何打包此使用功能?

  唯一的困难是如何获得下一个中间件。这次,我们考虑了中间件注册的时机。当中间软件注册在节点服务启动时发生时,执行是在请求进来时,因此当请求进来时,我们已经使用数组来保存所有中间部分,那么我们是我们,我们是您可以使用设置阵列以获取下一个中间件

  使用上述概念实现最简单的洋葱,以查看是否可以像KOA一样运行

  核实

  验证基于上述实施,有2点需要注意

  之前还提到过,当服务器启动时,所有中间件都已收集,因此,要使代码更强,最好在启动阶段进行强制性验证。LET的分析如何执行此操作。

  基于上述2分,可以得出。回调执行后,立即执行组合,并在请求时执行中间软件功能

  查看

  了解更多关于KOA边境的人可能会发现我们目前实施的代码有两个尚未处理的边界

  首先查看第一个边界,如图所示。尽管发出了警告,但日志为3和1。第一个下一个正常执行,它不会影响下一步的后续逻辑的运行。那么,我们如何判断代码中有不止一个?查看核心代码的核心代码构成

  每个接下来是一个调度(i + 1),这意味着每次执行下次执行时我是相同的。再次执行调度时,比索引或等于索引。

  那么第二个边界很容易处理。下一个下一个接下来的下一个,只需默认返回一个空功能

  然后验证整体验证

  报告错误的时间是因为基础包装不同并且不会影响它。

  在上一步中实现的代码的异步使用尝试尝试异步的运行结果

  这里很困惑吗?它与KOA源代码的操作一致。包装完成了吗?

  答案肯定是否!因为日志是正确的,因为异步的基本实现等待。一个词,底层原理是基于承诺的自执行的生成器函数。异步最终将回报诺言,等待等于产量。因此,请勿使用异步等待,直接使用承诺的结构观看演示

  从上面的演示中可以看出,最后一个中间部分是正常函数,但是先前的中间件使用next()。然后(),也就是说,最后一部分是一个承诺。这确实是在KOA中允许的,也没有错误,也就是说,KOA与普通功能兼容和承诺。那么您如何兼容?

  承诺

  让我们看一下Promise.resolve的源代码

  因此,再次修改组合功能

  刚刚验证演示,正常日志1 2 3,然后再次查看另一种情况

  通过报告错误,您可以看到2个未登录,即中间件中间部分的最后一件中间件。然后,如果您考虑上一个保护机制中的第二个边界的处理,请返回承诺。溶解直接解决解决方案以解决解决方案的问题

  终于完成错误情况的兼容性

  基础架构的一章直接基于文档以实现其原则。不再遵循以前的推论思想。首先,在包装之前,让我们看一下CTX的官方定义。简而言之,节点的响应和请求被封装。本部分仅封装了CTX,请求,响应和主体。

  然后在上述上下文的描述中,每个请求都会创建一个新的上下文并在中间件中引用它,这意味着服务器每次接收请求时(在回调中返回的功能),它们将基于REQ和RES基于REQ和RES。req and res)。创建上下文。文档在文档中描述了上下文中的内容。

  中间部分的第一个参数是基于上述描述的上下文,该描述可以按以下方式得出源代码(您只能查看注释部分)

  日志的CTX可能是以下结构

  响应和请求已分配了请求和响应的价值,因此您可以为Req和Res制作有用的软件包

  核实

  CTX别名可以看到官方文件具体的内容。在这里,您可以为请求的标题和URL执行此操作。其他是相同的。源代码用于使用代表制作代理层。实际上,您也可以使用代理等来实现请求的声誉

  核实

  在CTX.Body KOA为CTX.Body分配值之后,CTX的类型将在请求结束时识别,然后返回相应的数据

  因此,当我们只需要完成所有中间件时,判断身体类型,然后使用res.nd结束请求。源代码的粗略版本如下

  参考文章https://juejin.cn/post/702226279048347679Https://juejin.cn/post/7016587795510607879

  原始:https://juejin.cn/post/7096282667825496100