koa 2.0

  1. 1. Introduction
    1. 1.1. Callback hell
    2. 1.2. ES 2017
    3. 1.3. middleware U型嵌套 机制
    4. 1.4. 轻量化内核
  2. 2. 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::