资讯专栏INFORMATION COLUMN

koa2 总体流程原理浅析(一) 之 koa 启动服务器解析

fsmStudy / 3116人阅读

摘要:启动流程主要的启动流程就是下面的步引入包实例化编写中间件监听服务器引入包引入包其实就是引入的一个继承于原生的类的类其中就包含了等原型方法实例化执行,将等对象封装在实例中编写中间件首先判断的类型,不是方法直接抛错是生成器函数的话用封装是函数

启动流程
koa 主要的启动流程就是下面的 4 步:引入 koa 包 => 实例化 koa => 编写中间件 => 监听服务器
const koa = require("koa");

const app = new koa();

app.use(function 1(){})
app.use(function 2(){})
app.use(function 3(){})

app.listen(port,function(){})
引入 koa 包
引入 koa 包其实就是引入的一个 继承于 node 原生的 events 类的 Application 类
module.exports = class Application extends Emitter {
  constructor() {
    super();

    this.proxy = false;
    this.middleware = [];
    this.subdomainOffset = 2;
    this.env = process.env.NODE_ENV || "development";
    this.context = Object.create(context);
    this.request = Object.create(request);
    this.response = Object.create(response);
  }

  listen(...args) {}
  
  toJSON() {}

  inspect() {}

  use(fn) {}

  callback() {}

  handleRequest(ctx, fnMiddleware) {}

  createContext(req, res) {}

  onerror(err) {}
};
其中就包含了 listen 、use 等原型方法
实例化 koa
执行 constructor ,将 ctx、response、request 等对象封装在 koa 实例中
编写中间件
use(fn) {
    if (typeof fn !== "function") throw new TypeError("middleware must be a function!");
    if (isGeneratorFunction(fn)) {
      deprecate("Support for generators will be removed in v3. " +
                "See the documentation for examples of how to convert old middleware " +
                "https://github.com/koajs/koa/blob/master/docs/migration.md");
      fn = convert(fn);
    }
    debug("use %s", fn._name || fn.name || "-");
    this.middleware.push(fn);
    return this;
}

首先判断 fn 的类型,不是方法直接抛错

是生成器函数的话用 co 封装

是 async 函数的话直接放入中间件数组中

测试了一下,如果是普通函数的话,1.X 版本会报错,2.X 版本可以执行,但是由于没有 next,只能执行第一个

use 的作用就是把中间件函数依次放入 ctx.middleware 中,等待请求到来的时候顺序调用
监听服务器
  listen(...args) {
    debug("listen");
    const server = http.createServer(this.callback()); // 这里注册了 node 的 request 事件
    return server.listen(...args);
  }
koa 的监听主要有两个封装:

封装原生的 node sever 监听

封装 koa.callback(),并且为这个服务器设置了 node 的 request 事件,这意味着当每一个请求到来时就会执行 koa.callback() 方法,这是极为关键的一步,是 koa 中间件原理的基础

下回分解
下一章我们会讲解中间件的原理
END

 
 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94304.html

相关文章

  • koa2 总体流程原理浅析(二) 中间件原理

    摘要:任何一层报错,都能用捕获总结是一个非常轻量级的框架,只实现了中间件处理流程和对对象的封装。其他的功能都由外部中间件提供。 koa 的中间件机制巧妙的运用了闭包和 async await 的特点,形成了一个洋葱式的流程,和 JS 的事件流 (捕获 -> target -> 冒泡) 相似 handleRequest(ctx, fnMiddleware) { const res ...

    zhoutk 评论0 收藏0
  • KOA2框架原理解析和实现

    摘要:实现的四大模块上文简述了源码的大体框架结构,接下来我们来实现一个的框架,笔者认为理解和实现一个框架需要实现四个大模块,分别是封装创建类构造函数构造对象中间件机制和剥洋葱模型的实现错误捕获和错误处理下面我们就逐一分析和实现。 什么是koa框架?        koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度...

    tracymac7 评论0 收藏0
  • KOA2框架原理解析和实现

    摘要:实现的四大模块上文简述了源码的大体框架结构,接下来我们来实现一个的框架,笔者认为理解和实现一个框架需要实现四个大模块,分别是封装创建类构造函数构造对象中间件机制和剥洋葱模型的实现错误捕获和错误处理下面我们就逐一分析和实现。 什么是koa框架?        koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度...

    liangzai_cool 评论0 收藏0
  • 浅析koa的洋葱模型实现

    摘要:前言被认为是第二代,它最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型。这段代码就很巧妙的实现了两点将一路传下去给中间件将中的下一个中间件作为未来的返回值这两点也是洋葱模型实现的核心。 前言 koa被认为是第二代node web framework,它最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型。koa和koa2中间件的思路是一样的,但是实现方式有所区别,koa2在...

    dabai 评论0 收藏0

发表评论

0条评论

fsmStudy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<