盈彩体育注册(中国)有限公司
盈彩体育注册(中国)有限公司 您所在的位置:网站首页 盈彩体育注册(中国)有限公司 eggjs和nestjs eggjs和nestjs如何选择

eggjs和nestjs eggjs和nestjs如何选择

2024-05-06 11:57:48| 来源: 网络整理

很多人在选择框架的时候会不知所措,或者在面试时被问到框架间的区别,却不能很好的总结回答。今天就和大家分析对比一下目前主流的三个框架:Express,Koa2 和 Egg。相信能帮你了解它们之间的区别。

因为Egg是基于Koa开发的(Egg 1.x 基于Koa 1.x,Egg 2.x 基于Koa 2.x),所以Egg会继承Koa2对比Express的所有优点。因此我们先对比Express 和 Koa2,然后再对比Egg 和 Koa2。

1.Express VS Koa2

可能有些朋友还不知道,这两个框架师出同门,都是由nodejs大神 TJ Holowaychuk 开发并开源的。TJ Holowaychuk凭借频繁和高质量的提交,对nodejs社区做出了巨大的贡献。有人怀疑TJ Holowaychuk不是一个人,背后是一个团队,毕竟一个人完成这么多的工作量让人难以相信。

TJ Holowaychuk绝对称得上伟大的程序员,而伟大的程序员从来都是“缺少什么,就创造什么”。当年Bram Moolenaar 在 80 年代末购入他的Amiga计算机时,因为Amiga 上没有他最常用的编辑器vi,于是就开发了vim编辑器。TJ Holowaychuk觉得需要一个好用的node框架,于是就有了Express和Koa。

Express 和 Koa2 的区别主要有以下几点:

1.1 架构设计

Express是一个集合式的框架,自身集成了router,static,views,bodyparse等等常用中间件。这样的设计让开发者能非常快速的搭建一个node后端服务,这个服务功能齐全。可以实现接口服务,静态资源服务,页面服务,甚至文件上传也能实现。但是使用Express就必须引入全部的中间件和功能,不管你有没有用到。

Koa2的设计思想就是小而美,轻量,插件化设计。只提供最基础的框架,所有功能都通过中间件引入。Koa将Express集成的中间件进行拆分,开发者按需引入即可使用。比如:

得益于这种设计,用户在选择中间件时有了更多的选项。你可以选择koa提供的中间件(如果koa提供的话),也可以选择社区或第三方开发的中间件,甚至自己写一个都可以。这在Express上是无法想象的。

总结来说,Express是一个功能齐全,开箱即用的集合式框架,比较重。Koa2是一个插件化的轻量框架,功能按需引入。

1.2 ECMAScript版本

Express是基于ES5开发的,受限制于当时的JavaScript标准,很多功能的实现方式不是很好。比如异步执行只能采用回调函数的方式。

Koa2是基于ES7(ES2016)开发的,原生支持异步函数 async/await,使用Promise作为异步处理的标准,支持箭头函数等ES6新语法。我想着重推荐一下async/await,因为它又一次改变了JavaScript异步编程的方式,可以不关心是不是异步操作,全用同步的方式去写。举个例子来对比一下Promise 和 async/await,用 Promise 和 async/await 实现同样的异步操作:

可以看出,async/await 的写法更简单整洁,也更方便阅读。 Koa2能完美的支持ES6,如果想使用ES6新特性,Koa2比Express更值得选择。

1.3 中间件执行机制

中间件的执行机制可以说是Koa相较Express最大的改进。有人问TJ Holowaychuk为什么不升级Express而要开发的新的Koa框架? TJ Holowaychuk就提到了中间件机制和Express不同,Express项目难以直接升级使用新的中间件机制,只能开发新的框架。

我们先看一下Express的中间件执行流程:

Express的中间件时线性执行的,每一个中间件处理完后只有两个选择:交给下一个中间件或者返回Response。

只要请求离开了,中间件就无法再次获得这个请求,更不能再对它进行处理。

Koa的中间件机制是洋葱模型,中间件像一层层的洋葱。请求要穿过洋葱,每个中间件也会被穿过两次。

这个洋葱模型相信大家都很熟悉了,它很直观的解释了koa中间件的执行流程。这种洋葱模型机制对解决某些问题帮助很大,比如统计一个请求耗时时间,或者需要回调下一个中间件的处理结果,使用koa处理起来就非常方便,但是使用Express就很难实现。

如果Express也想实现Koa的洋葱模型就比较困难,需要开发者在每一个中间件上都添加回调函数。因此Express项目真的很难直接使用Koa的中间件机制,怪不得TJ Holowaychuk大神也要另起炉灶。

如果你有这样的需求,与其写层层回调还不如直接使用Koa。

1.4 异常处理

Express的异常处理是有一个error处理中间件完成的,由于Express的中间件时线性流程,所以要处理错误信息就必须把error中间件放到最后。

下面举个栗子说明在Express中如何使用这个错误处理中间件:

使用的规则就是:只要有错误,请调用error中间件。

如果逻辑比较多,恐怕要到处调用 next(err) 了。



【本文地址】 转载请注明 

最新文章

推荐文章

CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1