Koa与Node.js开发实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 Koa介绍

Koa是基于Node.js的Web框架,其特点是轻量、健壮、富有表现力,由Express的原班人马打造,目前有Koa1和Koa2两种版本。

2.1.1 Koa的前世今生

在详细介绍Koa之前不得不提到Express。同Koa一样,它也是Node.js的Web框架,可被称为Koa的上一代框架。Express 4之前的版本主要基于Connect,封装了大量便利的功能,如路由、视图处理、错误处理等。Express 4之后不再依赖Connect,除express.static外的内置中间件也全部作为单独模块安装。Express主要采用ES5的语法,异步操作通过回调函数来处理。相较而言,Koa对异步操作的处理更加简单,开发者不再需要面对讨厌的“回调地狱”。这是因为Koa1和Koa2分别采用了ES6中的Generator函数+yield语句+Promise语句和ES7中的async/await+Promise来处理异步操作。基于Express开发的旧有项目转用Koa框架成本较高,不但需要升级Node.js的版本,还需要重新编写几乎所有中间件,加之目前Express的中间件更多、更成熟,因此Express目前仍被广泛地使用。但是笔者相信在未来的某一天,Koa一定会完全替代Express,成为Node.js Web框架的主流。

除语法差异外,Koa不在内核方法中绑定任何中间件,它仅仅提供了一个轻量的函数库,几乎所有功能都需要引用第三方中间件来实现。也许有人会问,这样岂不是很不方便?其实这才是Koa最大的改进。这样不仅能够使框架更加轻量、优雅,也能够让开发者充分发挥自己的想象力,根据业务和项目定制中间件。更何况现在Koa的第三方中间件也非常丰富和成熟了。

下面通过一个“Hello World”的例子来对比Express与Koa1、Koa2之间的区别,让读者有一个直观的感受。

1.Express版“Hello World”

在上述代码中,使用Express自带的路由处理中间件处理了根路由,在处理根路由的回调函数中还要执行3个异步函数,形成了所谓的“回调金字塔”。如果异步函数更多一些,那么这段代码的可读性将会非常糟糕。

2.Koa1版“Hello World”

在上述代码中,由function*定义的函数就是Generator函数,Koa1采用Generator函数+yield语句处理异步函数,解决了“回调金字塔”的问题。但是Generator的设计初衷不是为了解决异步编程的问题,而是为了实现“协程”的功能。这里不展开讨论“协程”的概念,读者只要知道这是一种能使进程挂起或切换的功能,所以正好能用来处理异步函数的执行就可以了。不过,Koa1需要依赖co库来包装执行Generator函数。

3.Koa2版“Hello World”

乍看之下,上述代码与Koa1版的“Hello World”区别不大,仅仅使用async/await代替了原来的Generator函数+yield语句。然而这是专门为异步操作设计的基于Generator函数的语法糖,内置了执行器,不仅使代码可读性更强,而且因为ES7支持原生的async/await语法,Koa2不再需要依赖co库。

对比这3段“Hello World”代码,可以感受到因为JavaScript语法的更新换代和Node.js版本的升级,我们开发Node.js的Web应用更简单,程序更语义化,维护也更容易了。本书主要基于Koa2来讲解如何开发Node.js的Web应用,后面统称为Koa。

注意:Koa2.x依赖于Node.js 7.6.0或ES6及更高版本和async方法的支持。

2.1.2 Koa的安装及搭建(视频演示)

由于Koa2已经支持ES6及更高版本,包括支持async方法,所以请读者确保Node.js版本在7.6.0以上。如果需要在低于7.6的版本中应用Koa的async方法,建议使用Babel hook,示例代码如下:

1. 项目初始化

在安装Koa之前,首先需要创建项目的目录。新建文件夹koa2-tutorial用来存放示例代码,然后在koa2-tutorial根目录下初始化项目,生成配置文件package.json。初始化命令如下:

注意:生成的package.json文件用于管理项目中用到的一些安装包。

项目初始化完成后,在当前目录下新建app.js文件并输入所有程序员都熟知的一句话:

打开控制台,进入目录koa2-tutorial/,执行如下命令:

如果控制台成功输出“Hello World”,说明环境正常。至此,项目的准备工作已经完成。基本的项目结构如下:

2. 安装Koa

Koa的安装过程非常简单,只需通过如下命令即可安装最新版本:

注意:Koa的版本信息会自动保存在package.json中。

3. 启动服务器

Koa安装完成之后,修改app.js文件实现启动Web服务器的功能,代码如下:

然后,运行app.js文件并打开浏览器访问http://localhost:3000,正常情况下,页面将会显示“Not Found”。这是因为在3000端口下启动服务器进行访问时并没有对HTTP请求进行响应处理,故而报“Not Found”错误。为了让浏览器显示一些信息,代码还需要调整。修改app.js,加入一个简单的中间件处理所有请求,代码如下:

注意:此段代码需放置在服务器启动之前。

重新启动服务器,再次访问浏览器,将会正常显示“Hello World”。

本节在线视频地址为https://camp.qianduan.group/koa2/2/1/1,二维码: