美文网首页
Koa中间件思想

Koa中间件思想

作者: losspm | 来源:发表于2018-07-19 11:09 被阅读142次

对于node.js而言,目前接触的比较多的就是Express框架,对于Express框架的中间件理解就是,一层一层逐级往下,类似流水线上的每一个工序,如下

const express = require('express');
const app = new express();

app.use(function(){
  console.log('Here is the first one';)
})

app.use(function(){
  console.log('Here is the second one')
})

//输出结果为
// Here is the first one
// Here is the second one

由于当时理解洋葱模型时候,不够理解透彻,当时认为只是简单的layer through layer,每一个layer只是单单为一个二维平面,但是实际上,Koa的洋葱模型,每一层layer相当于一个球面,当贯穿整个模型时,实际上每一个球面(sophere)会穿透两次,在首先理解这个点时,先熟悉一下ES6的 yield 语法

class Test{
  constructor(){
    this.state = this.fn1();
    this.state.next();
    this.state.next();
  }
  *fn1(){
    console.log('This is fn1, phase 1');
    yield* this.fn2();
    console.log('This is fn1, phase 2');
  }
  *fn2(){
    console.log('This is fn2, phase 1');
    yield* this.fn3();
    console.log('This is fn2, phase 2');
  }
  *fn3(){
    console.log('This is fn3, phase 1');
    console.log('This is fn3, phase 2');
  }
}

const test = new Test();

// 此时的yield* 代表会执行后面的函数
// 输出结果为
//This is fn1, phase 1
//This is fn2, phase 1
//This is fn3, phase 1
//This is fn3, phase 2
//This is fn2, phase 2
//This is fn1, phase 2
//典型的洋葱结构

对于Koa

var koa = require('koa');
var app = koa();

app.use(function* f1(next) {
    console.log('f1: pre next');
    yield next;
    console.log('f1: post next');
});

app.use(function* f2(next) {
    console.log('  f2: pre next');
    yield next;
    console.log('  f2: post next');
});

app.use(function* f3(next) {
    console.log('    f3: pre next');
    this.body = 'hello world';
    console.log('    f3: post next');
});

//执行熟悉如下
f1: pre next
  f2: pre next
    f3: pre next
    f3: post next
  f2: post next
f1: post next

每个中间件会执行两次,这就是Koa中间件的核心思想

相关文章

  • koa系列(三)

    文章内容:koa 中间件 以及 koa 中间件的执行流程。 一、什么是 Koa 的中间件 中间件就是匹配路由之前或...

  • 知识点总结

    Koa2中间件 koa(面向node.js的表达式HTTP中间件框架)、koa-router(路由中间件)、koa...

  • Koa中间件思想

    对于node.js而言,目前接触的比较多的就是Express框架,对于Express框架的中间件理解就是,一层一层...

  • 8KOA 静态文件

    静态文件 使用 koa-static 中间件实现静态文件访问 安装中间件 使用中间件 使用 koa-mount 自...

  • koa

    koa 学习 中间件 koa-router koa-router 获取get/post请求参数 koa-bodyp...

  • koa.js的使用(koa2)

    koa与Express简单比较Express connect 中间件 封装了 路由、视图,koa co中间件 不包...

  • koa 常用模块

    koa-router koa路由中间件https://github.com/alexmingoia/koa-rou...

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

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

  • koa洋葱模型

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

  • Koa项目总结四:Koa静态资源的配置

    使用koa-static中间件来处理Koa项目中的静态资源。 1.1 koa-static安装: 1.2 koa-...

网友评论

      本文标题:Koa中间件思想

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