关于开发 koa 之上较高层级, 方便使用的框架思考
发布于 1年前 作者 Pana 1149 次浏览

TJ 的 koa 的确很酷, koa 是一个跟 connect 同层次的框架, 只提供了底层的基础方法和中间件平台. 所以在koa基础之上开发一个express同级别的框架是非常有必要的, 这样koa才能得到更广的应用. 我最初最简单的想法是在koa+一些中间件, 提供express现在提供的功能于是就是现在的 kopress

不过 python发烧友和dead_horse同学对这个的第一反应是为什么是 express like的框架. dead_horse 同学更是认为express like 是一个倒退, 且没有办法兼容express的中间件.

因为自己没有框架开发经验, 所以就有了这个话题, 探讨下我们到底需要一个怎样的koa之上的框架.

我个人考虑到的几个方面有:

  1. 在koa之上提供web开发中的常用功能, 使用方便, 容易上手, 这样会节省开发时间, 降低进入门槛
  2. 如果能兼容 express 的中间件将会省掉大量开发工作

至于其他需要考虑方面还需要广大 Noder 集思广益哈

11 回复

完全可以不管别人的质疑,坚持去做自己认为对的事情。

express 和 connect 现在走的路也是把中间件剥离出去单独维护。 第一个原因是中间件的更新和修复更方便,不需要频繁变更 express 版本。 第二个原因是你很难提供一个中间件集合让所有人满足需求。

我现在的做法是将一些常用和轻量级的中间件,集中到 koa-middlewares,然后项目引用 koakoa-middlewares 两个依赖,就可以轻松的引用到那些常用的中间件。

var koa = require('koa');
var middlewares = require('koa-middlewares');

var app = koa();

app.use(middlewares.bodyParser());
app.use(middlewares.jsonp());
app.use(middlewares.router(app));
app.use(middlewares.fresh());
app.use(middlewares.etag());
middlewares.csrf(app);

app.use(function *() {
  this.body = 'hello koa-middlewares';
});

app.listen(7001);

现在由于各个中间件还不稳定,所以我的 koa-middlewares 里引中间件都是固定版本号的,之后等这些中间件都稳定了就会改成带 ~ 前缀的 semver 。

至于想兼容 express 的中间,由于 koa 的 HTTP helpers 和 express 还是有挺大的差距的,几乎大部分的 express 中间件是很难直接转换成 koa 的中间件的。

这段时间写了不少的 koa 中间件,其实写 koa 的中间件会比 express 的更容易,也更加灵活,例如最近写的 koa-session

express like 的话,感觉处在一个比较鸡肋的位置,又不够完善,又绑了一些累赘的中间件在上面,有点得不偿失的感觉。

个人看法,楼主可以参考一下。:)

好, 多谢鼓励, 先搞出一个初始版本看看效果

哈哈,详见cnpmjs.org 代码

分析的几点很有道理, 受益匪浅.

个人认为之所以需要一个更高层级的框架是因为koa的易用性很差, web开发中常用到的普世功能都没有, 当然这跟koa的定位有关. koa+middleware集合方式使用起来还是不太方便尤其对于初中级开发者,新手来说. 他们需要的是一个作为整体的, 提供日常web开发常用到功能的东西, 这也是express的接受程度远远大于connect的原因

至于解耦和更新问题, 这个是express 4 的一个主要进步之处

具体的细节还没想清楚, 我再想想哈

@panawang 折腾koa的童鞋,手应该不会太新~ :)

我为公司用写的node WEB框架完全架构在EXPRESS之上,只是加入了更多适合公司业务的功能而已,比如更方便的控制SESSION、SESSION类型的访问、接口访问频率控制 我觉得在现有的技术(或框架)上扩展适合自己公司的业务功能就可以了,没必要再做通用的框架,适合自己就好。也许TJ想要的就是大家把扳手买回家,敲核桃也好,开啤酒盖子也好,自己想干什么就轻微的调整或扩展一下 。然后觉得自己的做的调整比较好,就拿出来给朋友们共享一下。

@booxood 对, 所以想让新手们也用上 koa 特性, 一个更高级的框架是有必要的

express 是在connect 基础之上开发的(虽然4.0不再依赖connect), 而koa是跟connect是一个层级的

@panawang 恩,这个我知道,怎么了?

@zenwong 所以一个功能更完善的框架还是有必要的

回到顶部