Null's Blog

关于koa的初级见解

为何是koa?

准备开发本博客的angular版本,在对angular有了初步理解后,知道,通常前端mvvm框架使用的数据接口是restful形式的api,既然决定做了,就准备了解下koa,为何是koa?很多大神都说koa,似乎比express更适合写restful的数据接口吧。

官网的一个示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// x-response-time
app.use(function *(next){
var start = new Date;
yield next;
var ms = new Date - start;
this.set('X-Response-Time', ms + 'ms');
});
// logger
app.use(function *(next){
var start = new Date;
yield next;
var ms = new Date - start;
console.log('%s %s - %s', this.method, this.url, ms);
});
// response
app.use(function *(){
this.body = 'Hello World';
});

执行顺序(yield next)很好理解,下面两张图说明:
actionflow
onion
到这里基本没什么问题。

那么问题在哪?

在查看了koa官方提供的examples之后,还说有点疑问:
example1
example2
我注意到,这里的yield似乎只有一步,也就是没有体现出koa所倡导的洋葱方式。
当然,以我目前对koa的理解,并没有十分认同yield这种形式,当然,也可以说不理解es6中的yield或generator,这里不扯远,只是想不清楚为何koa要发明这么一种形式?
相对于koa的整个洋葱,那express算半个洋葱,我觉得也没什么不好。
也许等以后有了深入理解之后,会觉得koa好吧。不过目前,angular博客的api还是改成基于express写吧。毕竟很多代码还可以重用。