koa 2.0

  1. 1. Introduction
  2. 2. Why Koa
    1. 2.1. Callback hell
    2. 2.2. ES 2017
    3. 2.3. middleware U型嵌套 机制
    4. 2.4. 轻量化内核
  3. 3. koa 2.0 Roadmap
  4. 4. koa 2.0 Boilerplate
  5. 5. REF::

koa 2.0 系列:

Introduction

在开始 koa 之前,先回想下一个 Web Framework 应该要做的事。

  • 监听请求
  • 处理 request 中的 header/body
  • 返回 response 中的 header/body

统称 request/response 为 context,一般处理 context 不会只有一件事,大多数时间,我们需要权限验证,判断用户来源,RateLimit,日志,自定义返回数据 等等,这些事件为一个链状,context 顺序通过这些事件并对其进行加工,这些的事件在 express/koa 中叫 middleware

当你看完 代码 时,你会发现和我们设想的一样简单:

1
2
3
4
5
lib
├── application.js
├── context.js
├── request.js
└── response.js

所以 koa 内部主要关注两个要点:

  • context(上下文)
  • middleware(中间件)


Why Koa

讲了上述的点后,并没有说明为什么是 koa,而不是 express 或其它。选择 koa 主要是以下几个重要的点:

  • Callback hell
  • ES 2017
  • Middleware U型嵌套
  • 轻量化内核

Callback hell

1.0 中,是通过 Generator 来实现了 coroutine-like,取消了 callback。

Callback 有两大硬伤,一是不可组合,二是异常不可捕获。

ES 2017

当然,选择它的主要原因是还有 支持 ES 的新语法

2.0 中用了 async functions 代替了 1.0 中的 co 的 Generator functions,使语法更优雅。

middleware U型嵌套 机制

这是 koa 很有特色的一个地方,另花笔墨去写。

轻量化内核

和 express 不同的是,它只做了 Web Framework 应该做的,Router,View 都不再提供,更轻量化。

当然也提供了多样性,可以用更适合的 middleware 来做事情。


koa 2.0 Roadmap

koa 2.0 目前并没有正式发布,主要是为了等 V8 的 async functions 集成。但并不意味着不能投入使用,相反很多公司都已经应用于生产了。


koa 2.0 Boilerplate

这是我写的一个 koa2 的最佳实践项目,其中包括:

  • 完整的项目结构
  • koa-router 集成
  • Sequlize & MySQL
  • DI Container 支持
  • Class 语法
  • Babel 配置
  • Multiple Environment 支持

重点说明下,为什么和其它的项目结构有所不同,这里采用的是类 rails 的结构,而不是将所有代码都放置在 src 目录下,原因是 node 很快就会支持所有的新语法,编译不再是必须的。

REF::