浅尝Koa —— 基于Node.JS的下一代Web框架

What is Koa?

Koa 是Node.JS平台下的一款Web服务器框架,它由原Express团队开发,区别于Express大量使用回调函数的形式,Koa采用最新的async/await模式,使用异步函数的方式来处理HTTP请求

Why Koa?

相比于Express是一个高度集成化的Web框架,Koa显得更加的小而美
它本身并不集成任何的中间件(包括路由),但得益于它优秀的理念,以及便捷的模式,我们可以通过大量的第三方库对其功能进行扩充。

从业务上来说,使用Koa可以很容易地控制项目的规模。

从开发上来说,Express使用callback的方式处理异步,而在Koa中,Koa1采用generator,Koa2使用async/await的方式来处理异步流程控制。

例如使用callback的方式请求资源:

1
2
3
4
5
fetchData(resourceID,method,function (data) {
process(data,function (result) {
handle(result);
});
});

换成generator的模式:

1
2
3
4
5
6
7
8
9
10
function *fetchData() {
var result = yield fetch(resourceID);
return result;
}

var data = fetchData();
data.next();
var result = process(data);
result.next();
handle(result);

再使用async/await模式:

1
2
3
4
5
6
7
async function fetchData() {
return fetch(resourceID);
}

var data = await fetchData();
var result = await process(data);
handle(result);

可以看出,使用async/await的方式可以使得异步编程更加简洁易懂,而且最新的JS为我们提供了这样方便的模式,我们没有理由不使用更好且更新的东西。

使用Koa2

使用Koa实现Hello World

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const Koa = require('koa');
const app = new Koa();

async function hello(ctx, next) {
ctx.body = 'Hello World!';
next();
}

async function welcome(ctx, next) {
await next();
ctx.body += 'Welcome To Koa2';
}
app.use(hello);
app.use(welcome);

app.listen(3000);

Context

Express中不同,Koarequestresponse集成到了Context中,也就是我们实现中间件函数中的ctx参数,可以通过ctx.requestctx.response来对请求和响应进行操作。

展望

目前Koa社区尚且比较小,但其量级够轻,并且更加先进,这应该是一个值得开拓的新技术,对于开发者自身来说,使用JS语言的新特性用也可以更加顺手