写点什么

Koa Web 框架发布 0.2.0 版本

  • 2014-01-27
  • 本文字数:1524 字

    阅读完需:约 5 分钟

基于 Koa 的 NodeJS web 应用框架发布了 0.2.0 版本。Koa 是广为流行的 Express MVC 平台的后续产品,但它在很大程度上依赖了 ES6 的新概念。项目领导 TJ Holowaychuck 说,Koa 作为“我从 Connect 和 Express 中发现的一个机会,让我这一次做‘正确’的事。”

这个版本被人称为“短小精悍”,这个版本的标号是重要的暗示,它重申了团队要从 0.1.0 开始发布的构想,本版本针对 Koa 的未来版本和产品用途充实了一些 API。

0.2.0 版本变更内容

这个版本最大的更新实际上是 koa-compose 模块,它把请求在中间件操作前和操作后的内容都记录到标准输出 (stdout) 中,使开发人员可以调试这些发到中间件的请求。

一些附加的小变更包括:套接字错误路由,以避免节点层的套接字处理对节点服务器的冲击;重构函数,目前已经把它们共享到了 Express 和 Koa 的模块,使它们都能在框架中使用;比如“accepts”模块,它负责内容协商,基于HTTP 应答头信息的值分辨请求带有的内容类型,使服务器能够响应带有不同内容的请求。

以生成器为基础

Koa 把它自己称为“下一代生成器 web 框架”,它充分利用了 co 库,它们使用 ECMAScript 6 语言规范中的生成器创建用在节点上的无阻塞同步过程。Prior 节点框架依靠回调函数和约定实现了某种程度的“栈处理”,这对于 HTTP 请求来说是必需的。

虽然实际上生成器是用来创建 Harmony 迭代器的“工厂”,但 Koa 却用它们把函数变成了同步操作。Koa 的应用程序可以向中间件的各个层发送请求。每次调用中间件函数时必须先 yield 它的返回结果然后再继续执行。

复制代码
var koa = require('koa');
var app = koa();
app.use(route.get('/', google));
function *people() {
// “get”异步的 HTTP 调用
var result = yield get('http://www.google.com');
// 在上面那句 yield 返回之前本句不会执行
this.body = result;
}

没有中间件

Koa 本身不包含中间件,这使它保持着轻量级的封装。Holowaychuk 解释说:“为方便起见(不仅仅针对最终用户),我们本打算把许多中间件捆绑到 Connect 里,但从节点到整个生态系统都针对我们进行了非常快速的更新,这使它的维护更加简单。回首这几年,绝大多数人都觉得捆绑这些中间件会是个错误的决定”。Holowaychuk 接着说,基于这种认识让我们决定不让 Koa 捆绑任何中间件,而是在单独的模块中提供它,为了方便可以捆绑这些模块。

koa-common 模块捆绑了 web 应用通常所需的大多数中间件。开发人员可以通过 NPM 中把所有这些中间件添加到他们的 Koa 应用中。

$ npm install koa-common## Koa 和 Express 的未来

Holowaychuk 提到,除了一些偶尔出现的古怪需求,大家认为 Koa 已经彻底完成了。

Express 的未来成了 Koa 的版本,用户“deif”对此表达了自己的忧虑

对此我有以下疑问:

  1. 请在 FAQ 上对 Express 的状态给出了官方的回答,但我猜你们不再会积极维护 Express 了,对吗?
  2. 假设现在把重点放到了 Koa 上,Express 已经是著名的节点框架了,为什么还要改名字呢?
  3. 如果一名新的开发人员同时看到 Express 和 Koa,他们能够马上知道哪个是现在的发展重点吗?

大体上我很奇怪为什么它不能称为 Express 3.0(或者 4.0)。

Holowaychuk 解释了改名的原因:

从 Express 到 Koa 的发展过程有着非凡的意义,虽然他们看上去很相似,但从本质上说它们完全不同,所以我不想把它称为 Express 4.0,我想我们应该给它起个新名字……有的人想要保留 Express,我们非常愿意有更多对它感兴趣的人加入到这个团队中。

查看英文原文: Koa Web Framework 0.2.0 Release


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-01-27 02:483819

评论

发布
暂无评论
发现更多内容

面试的季节到了,老哥确定不来复习下数据结构吗

Silently9527

面试 数据结构与算法

如何 1 天快速集成自己的“Clubhouse”?

融云 RongCloud

音视频 clubhouse 语音社交 融云

28天写作再次开启,你准备好来挑战了吗?

TGO鲲鹏会

28天写作 热门活动

进程管理:kill命令之-9与-15

程序员架构进阶

Java Linux 进程 七日更 2月春节不断更

我用 go-zero 一周实现了一个中台系统,已开源!

万俊峰Kevin

微服务 go-zero Go 语言

哲少荐书:鞋狗

Jackey

书籍推荐

【STM32】EXTI---外部中断/事件控制器

AXYZdong

硬件 stm32 2月春节不断更

OAuth:每次授权暗中保护你的那个“MAN”

华为云开发者联盟

大前端 协议 权限 Oauth web服务

程序员成长第九篇:真实项目中的注意事项

石云升

程序员 项目实战 2月春节不断更

话题讨论 | 今年,你回家过年了吗?

xcbeyond

话题讨论 春节 就地过年

第 4 周作业

老元宵

话题讨论 | 如何使用“网站SEO”,让网站排在最前面?

我是哪吒

大前端 后端 话题讨论 SEO 2月春节不断更

技术实践 | 新思路!解决线上系统异常问题

百度开发者中心

4.从legacy或concurrent开始(从入口开始,然后让我们奔向未来)

全栈潇晨

React React Hooks react源码

什么是阻抗?

不脱发的程序猿

阻抗 电路设计 电子元器件

2021新年最新分享:阿里Java岗5轮技术面经整理

比伯

Java 编程 架构 面试 程序人生

新闻|2021 FOSDEM为期两天的活动成功举办,一大波学习资源来袭!

PostgreSQLChina

数据库 postgresql 软件 开源社区

用例文档

三生赤水

日记 2021年2月18日(周四)

Changing Lin

2月春节不断更

ElasticSearch.04 - 基础操作

insight

elasticsearch 2月春节不断更

厉害了!这群95后正在用三维成像技术让科幻变成现实

华为云开发者联盟

视频 华为云 三维 裸眼 光学

华为云FusionInsight MRS在金融行业存算分离的实践

华为云开发者联盟

大数据 金融 华为云 存算分离 FusionInsight MRS

14. Python 与数据库那点事儿,滚雪球学 Python

梦想橡皮擦

python 爬虫 2月春节不断更

一维数组的动态和

小马哥

算法

Java中多线程启动,为什么调用的是start方法,而不是run方法?

Java 编程 架构

阿里云大佬爆裂推荐“redis全新手册”,内容即精华

比伯

Java redis 程序员 架构 程序人生

LeetCode题解:63. 不同路径 II,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

算法从有序数组中移除重复的数据,AI学习资源2020 John 易筋 ARTS 打卡 Week 38

John(易筋)

ARTS 打卡计划 ai youbute学习资源

区块链挖矿系统APP开发|区块链挖矿软件开发(现成)

v16629866266

心理声学基础

行者AI

心理 音乐

山东党建系统!组织部智慧管理平台搭建

源中瑞-龙先生

智慧党建 组织部 山东

Koa Web框架发布0.2.0版本_Web框架_Burke Holland_InfoQ精选文章