介绍
Express
- Express 是第一代最流行的web框架,对 Node.js 的 http 进行了封装。
- Express 的 API 很简单,但是它是基于 ES5 的语法,要实现异步代码,只有一个方法:回调。如果异步嵌套层次过多,代码写起来就非常难看。
Koa
- Koa 是 Express 的下一代 web 框架,它是基于 Node. js 开发的web框架。
- Koa 现在暂时有两个版本:Koa 1.x 和 Koa 2.0。
- Koa 1.0 使用Generator 实现异步,代码看起来像同步的;Koa 2 完全使用 Promise 并配合 async (await) 来实现异步。
Koa 1
var koa = require('koa');
var app = koa();
app.use('/test', function *() {
yield doReadFile1();
var data = yield doReadFile2();
this.body = data;
});
app.listen(3000);
Koa 2
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
await next();
var data = await doReadFile();
ctx.response.type = 'text/plain';
ctx.response.body = data;
});
app.listen(3000);
Generator 函数和 async 函数
Generator 函数和 async 函数的最大区别是 Generator 函数不能自动执行,需借助 co 函数库(如下代码),而 async 函数可以当作普通函数直接使用。
// Generator 函数,用于依次读取两个文件
var gen = function* (){
var f1 = yield readFile('/etc/fstab');
var f2 = yield readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
//Generator 函数只要传入 co 函数,就会自动执行。
var co = require('co');
co(gen);
//co 函数返回一个 Promise 对象,因此可以用 then 方法添加回调函数。
co(gen).then(function (){
console.log('Generator 函数执行完成');
})