写点什么

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:483914

评论

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

面试不再慌!苦学这份2023最全的Java性能优化实战笔记,已涨17k

Java你猿哥

Java 面试 JVM 多线程 Java性能优化

什么是 Intelligence Enterprise 的 Business network?

汪子熙

人工智能 机器学习 数字化转型 三周年连更

Java8 lambda 表达式 forEach 如何提前终止?

Java你猿哥

Java ssm java8 foreach

为什么有些前端一直用 div 当按钮,而不是用 button?

海拥(haiyong.site)

三周年连更

我理解的声明式 vs 命令式

agnostic

声明式

一文看懂:性能监控神器JavaMelody

后台技术汇

三周年连更

程序员如何应对失业? | 社区征文

石云升

职业规划 三周年征文 三周年连更

围绕应用的云原生转型建设

穿过生命散发芬芳

云原生 三周年连更

Matlab实现Non-Local Means算法

袁袁袁袁满

三周年连更

Bash脚本中的Sleep命令到底有何妙用?

wljslmz

三周年连更

MySQL面试八股文:索引篇

Java你猿哥

Java MySQL ssm 索引 八股文

程序性能提高了5倍!开源阿里500页的Java程序优化笔记

Java你猿哥

Java 面试 性能优化 Java虚拟机 Java性能优化

速通字节!阿里p8耗时6个月打造的java面试手册,看到直呼“面试有手就行”

Java你猿哥

Java spring 微服务 JVM 多线程

基于Alpine制作Tomcat的Docker镜像

清康

python采集评论区内容

BROKEN

三周年连更

自动化与DevOps

阿泽🧸

自动化 三周年连更

Python语法基础快速回顾

timerring

Python

Java 数组在内存中的结构是怎样的?数组访问、遍历、复制、扩容、缩容如何编写代码?

Java架构历程

Java 数组 三周年连更

变量,常量以及与其他语言的差异

乌龟哥哥

三周年连更

为什么《魂斗罗》只有128KB却可以实现那么长的剧情?

Java你猿哥

Java 编程 程序员 汇编语言 优化技术

我懵了,如果要存 IP 地址,用什么数据类型比较好?

Java你猿哥

Java MySQL 数据库 ssm IP

分布式事务的21种武器 - 4

俞凡

架构 云原生

Python的常见数据结构

timerring

Python

Mac M1 安装SD(上)

IT蜗壳-Tango

三周年连更

Golden Gate(GGX)开发者见解与创新DeFi应用

股市老人

Go语言开发小技巧&易错点100例(七)

闫同学

三周年连更

SpringBoot核心配置全面总结

小小怪下士

Java 程序员 后端 springboot

字节速通!这份软件测试八股文还怕不能拿offer?你值得拥有

Java你猿哥

MySQL 面试 软件测试 计算机 八股文

OpenHarmony应用TS&JS编程指南

鸿蒙之旅

OpenHarmony 三周年连更

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