美文网首页
Koa 的使用以及洋葱模型

Koa 的使用以及洋葱模型

作者: 语文化及 | 来源:发表于2020-06-14 21:22 被阅读0次

https://www.npmjs.com/package/koa

Only methods that are common to nearly all HTTP servers are integrated directly into Koa's small ~570 SLOC codebase. This includes things like content negotiation, normalization of node inconsistencies, redirection, and a few others.

Koa is not bundled with any middleware.

Koa 是一个轻量型的HTTP 框架,它本身不会跟任何的中间件绑定, 基本上我们常用的一些功能例如koa-router, koa-bodyparser 等都是以插件形式与Koa结合使用。

Koa的基本使用.

// response
app.use(ctx => {
  ctx.body = 'Hello Koa';
});

app.listen(3000, () => {
    console.log('listen at 3000 host')
})

这样短短的几行设置其实就能把一个http server 跑起来。

Koa provides a Request object as the request property of the Context.
Koa's Request object provides helpful methods for working with http requests which delegate to an IncomingMessage from the node http module.

另外通过ctx可以拿到request和response对请求体和返回体进行操纵,但实际上,koa除了提供ctx参数之外,还提供了一个next参数。

具体用法如下:

const delay = () => Promise.resolve(resolve => setTimeout(() => resolve(), 2000));
// tag1
app.use(async (ctx, next) => {
    ctx.body = "1";
    await next();
    ctx.body += "5";

});
//tag2
app.use(async (ctx, next) => {
    ctx.body += "2";
    await delay();
    await next();
    ctx.body += "6";
});
//tag3
app.use(async (ctx, next) => {
    ctx.body += "3";
});

上面代码的具体输出为 12365, 具体原因

  1. 这里调用了三次use,所以koa会按照 tag1 -> tag2 -> tag3 的顺序执行.
  2. 当每次碰到调用了next 函数的时候会先跳到下一次tag执行。
  3. 所有的tag都按顺序执行完了之后,会从后到前依次执行next函数后的代码。

这样就构成了一个类似洋葱的模型.

image

tag1 tag2 tag3 里边的每一个async (ctx, next) => {} 相当于这里从外到里的每一个中间件, 执行的过程类似于拿一根针往洋葱里边插入,到最深点后再逐层返回。于是这里的插入过程就是123, 返回过程就是65。

当然实际使用的时候tag1 tag2 tag3 会换成功能更强大更完善的各类插件 来实现 registry, statusCode redirect, errorhandle 等功能,如下图所示:

image

以上就是我对Koa框架的基本使用以及模型的理解, 目前打算下一篇会自己手撸一个带核心功能的Koa框架。

相关文章

  • 【Node】深入浅出 Koa 的洋葱模型

    本文将讲解 koa 的洋葱模型,我们为什么要使用洋葱模型,以及它的原理实现。掌握洋葱模型对于理解 koa 至关重要...

  • Koa 的使用以及洋葱模型

    https://www.npmjs.com/package/koa Only methods that are c...

  • koa 中间件机制以及异常捕获

    koa 中间件机制以及异常捕获 koa 中间件机制解析 koa 的请求处理是典型的洋葱模型,下面是官方的配图,而这...

  • 【源码学习----koa】koa中间件核心(koa-compos

    最近经常使用koa进行服务端开发,迷恋上了koa的洋葱模型,觉得这玩意太好用了。而且koa是以精简为主,没有很多集...

  • jk node笔记(2)

    express 中间件在没有异步的情况下,符合洋葱模型,一旦有了异步,就会打破洋葱模型。koa 中使用异步函数写中...

  • koa洋葱模型

    koa-compose:koa-compose则是将 koa/koa-router 各个中间件合并执行,结合 ne...

  • koa洋葱模型

    前几天面试node,面试官问了koa的中间件是如何实现的,我一想,卧槽,这特么不是我很熟悉的么,然后就哇啦啦啦的一...

  • koa 洋葱模型

    分析 1、首先这是koa2最简单的入门例子,我将通过这个入门例子来演示koa2的洋葱模型 在这里面,app首先是调...

  • koa全攻略

    1.什么是洋葱模型 简单介绍 用一句话来说,koa,express框架的中间件的执行顺序,可以比喻成洋葱模型。 我...

  • koa洋葱模型原理

    首先,关于 洋葱模型 自上而下-》自下而上 回溯机制并不是 koa 自己的特性,而是 async/await 自己...

网友评论

      本文标题:Koa 的使用以及洋葱模型

      本文链接:https://www.haomeiwen.com/subject/fqifxktx.html