说明
koa是express的轻量级版本。koa不绑定任何的中间件,但是依赖中间件来完成指定的任务。koa中提供了很少的API,所以koa整体上很小。
下面文档介绍了koa基础知识,并且加上了一个小例子。
注意:koa 1.x 和 koa 2.x有一些不同,下面内容都是围绕koa 2.x做介绍。
Koa安装
$ mkdir mypp && cd myapp
$ npm init
$ npm install koa --save
说明:如果node版本过低,可以采用node版本控制器 n 来快速切换node版本。详细看:https://github.com/tj/n
Hello World
新建一个 app.js 文件,文件内容如下:
var koa = require(‘koa’);
var app = new koa();
app.use(ctx => {
ctx.body = ‘hello world’;
});
app.listen(3000);
输入以下指令运行程序,
$ node --harmony app.js
说明:高版本的 node 可以不使用 –harmony 选项。
浏览器查看运行结果,http://localhost:3000。
web项目目录
开发项目时,可以按照以下目录结构来进行编写代码,养成自己的风格习惯。
|- app.js 程序启动文件
|- node_modules 项目依赖库
|- public 静态资源文件
|- routes 路由文件
|- views 前台页面显示文件
|- package.json 配置信息文件
说明:以上只是一种风格习惯,可以选择使用或者不使用。
中间件
什么是中间件?实际上就是function,而函数的类型又分为异步函数和普通函数。
koa中间件的执行都是依靠generator来进行实现,中间件的组织形式是级联的方式组织起来。中间件有个统一的接口,接口的规范如下:
async function middlewareFunction(ctx, next) {
...
}
app.use(middlewareFunction);
上面代码 app.use(middlewareFunction)
, 表示使用中间件 middlewareFunction
。
ctx 表示 Context, next 表示下一个中间件。
级联代码
koa的中间级实际上使用了一个调用栈来进行管理,遇到await next
或者yield next
就暂停,开始调用下一个中间件,以下是中间件的大概形式。
.middleware1 {
// (1) do some stuff
.middleware2 {
// (2) do some other stuff
.middleware3 {
// (3) NO next yield !
// this.body = 'hello world'
}
// (4) do some other stuff later
}
// (5) do some stuff lastest and return
}
执行顺序
接下来看看中间件的执行顺序和过程。
看以下代码的执行流程:
var