东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

koa2 快速入坑

  • 2019-09-15
  • 本文字数:2231 字

    阅读完需:约 7 分钟

koa2快速入坑

为啥入坑 koa2?


  • koa2 小而美,相比 express 更小、更健壮、更富有表现力;

  • 全面支持 ES6/ES7 语法;

  • 结构优雅,易于扩展,360 的 thinkjs,阿里的 egg.js 全部基于 koa2 开发,源代码只有 4 个文件,500 行代码;

  • 站在 2018 年的节点来看,Koa2 的学习大潮已经到来。

Node.js 技术栈 Web 服务框架的发展

没有轮子的年代


早期 nodejs 就提供了 http 服务的能力,当时人们已经开始尝试使用 nodejs 提供 web 服务,类似这样:



没有轮子,高级一些的功能和用法全部需要自己编码实现。。。


英雄登场


为了降低人们的重复性劳动,更高效的使用 nodejs 搭建 web 服务,人们开始发明各种轮子。express 是其中最流行的 web 框架,后来又出现了 koa,koa2,hap。



再后来,基于 koa,又出现了一些企业级的开发框架,例如 360 的 thinkjs,最近,阿里也开源了它的基于 koa2 的框架-egg.js。这也证明了 koa 框架本身结构分拆的优秀,然而,无论是 express 还是 koa,这些框架都来自一人之手,TJ。


TJ 何许人也,前端的小伙伴们可能了解这位大神。看下面这个图:



他的自我介绍:


TJ Holowaychuk,程序员兼艺术家,Koa、Co、Express、jade、mocha、node-canvas、commander.js 等知名开源项目的创建和贡献者。


社区影响:


https:// nodejsmodules. org 第一页出现次数最多的那个少年,


高产到令人发指,Quora 上甚至有人猜测 TJ 不是一个人,而事实上他就是一个人。


substack/npmtop:对 node npm 社区代码贡献截止目前占到整个社区的 3.04%。



好,膜拜完大神,我们继续看 nodejs 框架的发展。


初代英雄 Express 诞生



Express 早期提供了 web 服务器各种常用功能的全家桶,提供了例如路由、表单解析等功能模块,中后期做了大量的拆分,将大部分模块都独立出来官方自行维护,或者是采用社区其他开发者提供的中间件模块。虽然进行了拆分,但 Express 总体来说是相对大而全,API 较为丰富的框架,并且它的整个中间件模型是基于 callback 回调,而 callback 随着逻辑增多,会出现 callback hell 的问题。


而且 express 对于中间件完全是顺序调用的,对于一些需要流程控制的场景,解决方案比较复杂。于是 TJ 大神开动异于常人的脑回路,设计了 Koa。


二代目-Koa 登场 - 我们不一样




Koa 从一开始就选择了跟 Express 完全不同的架构方向。


首先 Koa 与 Express 是在做同样事情上的不同实现,所以意味着他俩对外提供的能力大部分是相同的,我们看不同的地方:Koa 从一开始就是按照功能模块划分,各司其职。koa 的 context,也就是 ctx,上面有很多引用,最核心的是 request 和 response,这俩可以对应到 Express 两个对立的 req 和 res,在 Koa 里面,把它俩都集中到 ctx 里面进行管理,分别通过 ctx.request 和 ctx.reponse 进行直接访问,原来 Express 两个独立对象做的事情,现在一个 ctx 就够了,上下文对象都在他手中,想要联系谁就能联系谁。 其次是它的中间件机制,Koa 真正的魅力所在,后面中间件环节,我们会对此进行介绍。


三代目 koa2




  • 函数式编程

  • ES7 官方标准异步方案:async/await


你值得拥有


目前的 koa 官方 github 已经全面的使用 koa2 版本的代码了,并且有一句非常重要的提示 Koa requires node v7.6.0 or higher for ES2015 and async function support.。意思是说,koa 需要至少 node v7.6.0 版本和 ES2015(es6+async)才能使用。


koa2 结合了 async/await 已经成为了最好的 web 开发框架。


Koa1 和 koa 框架模型,API 基本相同,但是两者的中间件互不兼容,(底层实现不同),官方提供了方便的升级工具,可实现升级。


koa2 框架定位:


–更小、更健壮、更富有表现力;


–免除重复繁琐的回调函数嵌套;


–极大地提升错误处理的效率;


–轻量、优雅,仅提供 web 服务最基础的函数库;


–通过中间件扩展实现不同的高级需求;


koa2 的源码只有四个文件,500 行左右。只提供封装好 http 上下文、请求、响应,以及基于 async/await 的中间件调用机制。源码阅读此处不具体展开,有兴趣可以阅读下。



以下对 koa2 的语法进行简单介绍


首先是创建一个服务实例:



上图中,app.use(function)方法中的 function 就是一个最简单的中间件,通过多次 app.use()方法可以在 koa2 框架中注册多个中间件。如下图所示:



与 express 最大的不同点,就是中间件再也不是顺序执行,而是类似洋葱和堆栈,先进后出的流程,这样可以提供更好的流程控制,例如日志处理。


著名的洋葱模型:



以上代码请求结果如下图所示:



路由


koa2 本身不提供路由模块,但是通过引入独立的路由模块,就可以提供类似 express 的路由能力,代码如下图:




以上方式实现了接口和业务逻辑的分离,可以提高业务逻辑代码的复用,职责分离。


静态资源服务


koa2 通过引入独立的模块,可实现类似 nginx 的静态资源服务能力,如果不需要反向代理等能力,甚至都不需要部署 nginx 了。可参考以下代码:



SSR 后端渲染


为了提高首屏加载速度,有时候需要进行后端渲染,koa2 通过加载其他模块也可以支持,代码参考如下:


# 安装koa模板使用中间件 npm install --save koa-views# 安装ejs模板引擎 npm install --save ejs
复制代码




mongodb 数据库操作



MySQL 数据库操作



以上,对 koa2 的一些常见语法给出了样例参考。


2018 年 koa2 的生态系统已经比较完善,各大厂也基于 koa2 进行了封装,开源了一些面向工程和业务实践的框架,例如 egg.js。


关于 Koa2 的讲解就先分析到这,希望对大家有所帮助。如有不同的看法,欢迎交流!


本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接:


https://mp.weixin.qq.com/s/0KhR3on2kW8Mc-rkJzqT8Q


2019-09-15 23:181055

评论

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

缕析条分Scroll属性 | 京东云技术团队

京东科技开发者

前端 DOM ScrollView ScrollView(滚动条) 企业号 7 月 PK 榜

Last Week in Milvus

Zilliz

Milvus Zilliz AIGC cvpstack

只有1%的人才知道的ChatGPT写作技巧

俞凡

人工智能 ChatGPT

高性能网络设计秘笈:深入剖析Linux网络IO与epoll

华为云开发者联盟

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

MobPush Android For Unity

MobTech袤博科技

开发者 前端 Unity Android; Java’

直播软件源码开发搭建提高安全性方案——山东布谷科技创作

山东布谷科技

源码 软件 软件开发 直播 源码搭建

DDD架构为什么应该首选六边形架构? | 京东云技术团队

京东科技开发者

分层架构 架构设计 企业号 7 月 PK 榜 六边形架构

LeetCode题解:2618. 检查是否是类的对象实例,使用instanceof

Lee Chen

JavaScript LeetCode

认识高性能服务治理框架 Kmesh

openEuler

Linux 开源 操作系统 openEuler 服务网格

Debian11系统编译安装Memcached教程。

百度搜索:蓝易云

memcached 云计算 Linux 运维 Debian

聊聊Spring注解@Transactional失效的那些事 | 京东云技术团队

京东科技开发者

spring Transactional @Transactional 企业号 7 月 PK 榜 注解失效

升级数智底座是数智化2.0时代的核心诉求

用友BIP

数智底座

Brotli-压缩算法的潮流 | 社区征文

不叫猫先生

Brotli 压缩算法 年中技术盘点

火山引擎DataLeap如何解决SLA治理难题(二):申报签署流程与复盘详解

字节跳动数据平台

大数据 数据中台 数据研发

ChatGPT火热之下的冷思考

这我可不懂

AIGC ChatGPT

一文让你了解全媒体广告投放。轻轻松松搞定全媒体信息流广告投放代理!

吴老师讲业

全媒体互联网广告 全媒体广告投放代理 招商加盟 信息流广告

安装Ingress-Nginx

tiandizhiguai

云原生 k8s

引领AI变革,九章云极DataCanvas公司重磅发布AIFS+DataPilot

九章云极DataCanvas

IPQ8072|XGS-PON|Dual Band 10GbE Wifi6 Industrial SBC DR8072V01

wallyslilly

Win11 搭建SD WebUI环境 | 社区征文

IT蜗壳-Tango

AIGC Stable Diffusion 年中技术盘点 SD

完成等保测评后有合格证书吗?是什么样的?

行云管家

等保测评 等保2.0 等级测评

国赛线下开赛!全国智能车百度智慧交通创意组区域赛今日正式拉开帷幕!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

用ChatGPT挣钱的五种思路

高端章鱼哥

机器人 零售行业 ChatGPT

Debian11系统编译安装Redis教程。

百度搜索:蓝易云

redis 云计算 Linux 运维 Debian

航空机场行业如何绘就全面预算降本增效新画卷?

用友BIP

全面预算

当你成为一个Tech Lead

码猿外

技术管理 Tech Lead

亚信科技荣任「DBL电信行业工作组」副组长单位,AntDB数据库连年入选《中国数据库产品图谱》

亚信AntDB数据库

AntDB 数据库· AntDB数据库 企业号 7 月 PK 榜

ChatGPT的探索与实践-业务应用篇 | 京东云技术团队

京东科技开发者

人工智能 ChatGPT 企业号 7 月 PK 榜

小动作牵动大文明,“大运空瓶行动”从你我做起

新消费日报

ChatGPT赋能Scrum实践

俞凡

人工智能 Scrum 敏捷开发 ChatGPT

浅谈一下自动化运维优点和缺点,哪款工具好?

行云管家

自动化 IT运维 自动化运维

koa2快速入坑_文化 & 方法_翟广鹏_InfoQ精选文章