写点什么

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

评论

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

杜绝开源依赖风险,许可证扫描让高效&合规「两不误」

极狐GitLab

DevOps DevSecOps 开源许可证 极狐GitLab 安全合规

详解GaussDB(DWS)用户监控原理及应用

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

网闸、防火墙、堡垒机三大定义说明

行云管家

防火墙 堡垒机 网闸

阻抗板是否高可靠,华秋有话说

华秋电子

JVM垃圾收集器全面剖析:算法、实现和优化

xfgg

Java JVM GC

数据可视化:部分整体类可视化图表大全

2D3D前端可视化开发

数据分析 数据可视化 数据可视化工具 可视化图表 数据可视化设计

MobPush iOS端合规指南

MobTech袤博科技

堡垒机免费版有哪些功能啊?后面需要过等保怎么办?

行云管家

安全运维 运维软件 免费运维

数据可视化:相关类可视化图表大全

2D3D前端可视化开发

数据可视化控件 数据可视化工具 可视化数据 可视化图表 数据可视化设计

【深度剖析】JavaScript中块级作用域与函数作用域

沉浸式趣谈

JavaScript 闭包 作用域 函数作用域 块级作用域

数智领航营:酒类农牧业数智化转型中的数智化决策实践

博睿数据

可观测性 博睿数据 数智化 数智领航营 酒类农牧业

技术分享| 融合会议协议大解密

anyRTC开发者

音视频 视频会议 快对讲 H.323 融合会议

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

OpenAnolis小助手

开源 容器 虚拟化 龙蜥社区 龙蜥大讲堂

Flutter热更新技术探索 | 京东云技术团队

京东科技开发者

flutter ios App an'droid 企业号 5 月 PK 榜

易观千帆 | 2023年4月银行APP月活跃用户规模盘点

易观分析

金融 数字经济 手机银行

Nodejs 应用编译构建提速建议 | 京东云技术团队

京东科技开发者

node.js 编译 前端构建 企业号 5 月 PK 榜

3D LED显示屏选购指南

Dylan

3D LED显示屏 避坑指南

实例讲解Spring boot动态切换数据源

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

性能测试监控指标及分析调优 | 京东云技术团队

京东科技开发者

性能优化 性能测试 企业号 5 月 PK 榜 测试监控

产品经理们,请小心这 5 种错误的职场打开方式!

LigaAI

产品经理 团队协作 研发协作 产品负责人 企业号 5 月 PK 榜

手机一开,说办就办!指尖上的“数字江西”

OceanBase 数据库

数据库 oceanbase

设计师解放双手之作!3秒生成风景园林效果图,AIGC赋能景观设计

飞桨PaddlePaddle

人工智能 百度飞桨 AIGC Stable Diffusion

Kafka实时数据即席查询应用与实践

vivo互联网技术

kafka 实时数仓

音频编辑工具 Celemony Melodyne Studio5激活

真大的脸盆

Mac Mac 软件 音频编辑 音频处理工具 编辑音频

手把手教你在昇腾平台上搭建PyTorch训练环境

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 5 月 PK 榜

inBuilder今日分享丨系统集成系列之背景与方案概述

inBuilder低代码平台

Bytebase:更好地管理你的 OceanBase 数据库

OceanBase 数据库

数据库 oceanbase

GitHub上标星75k+超牛的《Java面试突击离线版》够你润进去了

程序知音

Java java面试 Java进阶 Java面试题 Java面试八股文

生态伙伴 | 携手深圳科创学院,持续推动项目落地与成长

华秋电子

深度学习进阶篇-预训练模型[3]:XLNet、BERT、GPT,ELMO的区别优缺点,模型框架、一些Trick、Transformer Encoder等原理详细讲解

汀丶人工智能

自然语言处理 深度学习 预训练模型 Transformer GPT

揭秘百度IM消息中台的全量用户消息推送技术改造实践

JackJiang

消息推送 即时通讯IM im开发

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