【译】为何你应当选择NestJS作为你的后端框架
本文是《Why You Should Choose NestJS as Your Backend Framework》的翻译,本人翻译水平有限,请勿吐槽,如有错误还请指出(已移除原文中广告部分的内容),Thanks♪(・ω・)ノ~
Amplication(一个网站)
向你解释为什么你应该选择NestJS
作为你的后端框架,你将了解到使用NestJS
的好处以及为什么它与Amplication
是那么的契合。
- 快速、能够弹性的处理并发请求
- 容易理解、工作效率高
- 可靠的,拥有大量的支持与文档
当我在Node.js
的世界越挖越深,我遇到NestJS
。它有那么几点立即引起了我的注意:
- 它发展得很快,知名度不断提高,文档也写得很好
- 它基于稳定的技术(
Express.js
、Fastify
) - 支持
TypeScript
当我们对NestJS
的团队进行调查后,决定就要跟随它。我将告诉你为什么我们从不后悔做了这个决定。
使用NestJS
这一年来都非常满意,我将跟你分享它几个最具有价值的东西,以及告诉你为什么应该考虑一下选择NestJS
作为你的后端框架。
NestJS是开源的
NestJS
是Github
上面一个拥有4万多star的项目。它拥有超过300位的活跃贡献者。新的功能、改进、bug的修复以及安全修复都能被快速响应。
感谢其庞大的用户基数,因此有着庞大的插件生态,包和整合包帮助我们节省了很多时间,让我们有更好的开发体验。
拥抱TypeScript
NestJS
完全拥抱TypeScript
,并且拥有高级编程语言的支持。开发者能从TypeScript
的功能的获益,包括编辑器的支持,智能提示以及类型安全。它能帮我们在构建时就及早发现问题,而不是等到发布上线后,上线后才发现问题这也是JS开发中的痛点。TypeScript
编程更容易让我们沉浸下去,以及更好的理解。
根据StackOverflow开发者调查报告,TypeScript
的知名度这几年上升得很快。在报告中,它这几年蝉联最受欢迎和喜欢的技术前三。
如果你已经在使用TypeScript
或者准备项目迁移,NestJS
无疑是很好的就选择!
NestJS的约束
为了更好的使用NestJS
,你应该跟随它的习惯和面向对象的思想。虽然这在很大程度上取决于每个人的口味,但我相信这是它最有价值的东西之一。
拥抱NestJS
固执的标准可以让我们聚焦于功能的编写,而较少考虑一些无价值的事情,比如说目录结构、文件命名、变量命名、测试方法等等。使用一个有约束的框架会大大减少那些降低开发者与团队效率的事情。
基于这一电,所有的NestJS
项目看起来都是差不多的,这对我们的团队协作的成本大大降低。
一个自动生成的NestJS
项目结构:
强大的模块系统
这是NestJS
最受欢迎的功能之一,NestJS
内置的模块系统自然使得每个关注点整齐的分离。
一个标准的NestJS
应用是由多个模块组成的,每个模块只关心他自己的组件(Controllers
、Services
等等),模块可能会依赖于其他模块的功能。
这个机制使得依赖可以注入,这个特别好的功能帮助我们管理我们的依赖以及在我们的应用中分享它,而不需要担心功能的重复与初始化等等。
你可以了解到更多关于模块的信息:NestJS文档-模块
NestJS的测试
NestJS
的模块系统让我们测试非常简单,模块的功能应该是单一的(就像订单、用户、商品),还得是可测试的。在NestJS
里,写一个独立的自动测试是很简单的。
NestJS
内置Jest
,Jest
是JS的生态中著名的测试模块。
当创建一个项目的时候,NestJS
还会创建一些基础的资源,包括单元测试,端对端测试。
也许你已经知道了,当我们写测试的时候,我们经常需要mock一些依赖。NestJS
的测试模块已经考虑到这一点,还提供了一些自动mock的功能帮助我们。
NestJS的createMock
函数帮助我们自动mock依赖:
你可以了解更多关于测试的信息:NestJS文档-测试
如果你对NestJS
以及测试很感兴趣,这里有一个很不错的的Github
项目,里面包含测试技巧和各种示例,不如说GraphQL
、gRPC
、REST
。可以了解一下:jmcdo29/testing-nestjs
安全
在我们今天的软件开发中,安全是最为紧要的事情,一个可靠的安全记录可以帮助我们建立与用户和顾客的信任。反之,安全的问题最终会对我们的品牌造成不可挽回的损失。
当使用NestJS
,这一点没有什么好担心的,NestJS
通过简单集成
验证、授权模块、守卫来增强安全。
基于这些,NestJS
帮你管理CORS
和CSRF
(你也可以根据你的需求自行配置)。
自然的,当你想让你的部分路由只对授权用户开放,NestJS
已经为你提供了守卫功能,这样让你可以很轻松完成这个需求。装饰器的使用让这件事变得非常可描述化,这对工程是非常有利的。
POST/product
的终端被NestJS
的AuthGuard
守护着。
比如说,NestJS
与Passport.js完美的集成,这是一个著名的库,它提供授权,且允许你能轻松的使用类似JWT
的策略(JSON Web Token)。
对通用技术的支持
连接数据库?没问题。想要使用GraphQL
的API?很简单。需要消费RabbitMQ
?当然可以。想要从Redis
里获取数据?当然没问题!
NestJS
的成长速度和知名度丰富了包的生态(官方和社区的都有)。
这些包都很容易安装和集成,它们被实现作为NestJS
的模块,这使得我们可以非常自然的在我们的项目里集成和使用它们。
这是一个在NestJS
项目里引入GraphQL API
的示例:
如果你想进一步了解的话,这里有一份短小的技术清单:
如想了解更多的技术,可以看看NestJS技术里的文档。
优秀的文档与友好的社区
真的,在我看过的文档网站中,NestJS
有许多很不错的文档,这使得我们可以快速的使用它。
负责人出色的完成了很多工作,比如说整体的介绍、核心概念的解释(通过视觉)、基本原则、通用技术和技巧。
我非常鼓励你看看Nest文档以及自己体验一下。
社区这一块,NestJS Discord server是一个超过3万活跃用户的社区。我已经在上面发起过多次的求助,总能获得支持和理解。
随着NestJS
的易用性和知名度加强,社区在建设它们的生态方面都很积极,这是双赢。
总结
NestJS
似乎什么都有,它很快,它也不重复造轮子。它支持所有著名的工具、技术、模型。它基于稳健的模型,包括稳健型模块系统、依赖注入和牢记可测试性。NestJS
的应用非常简单易用,而且通过几行代码就可以进行拓展。
NestJS
确实减少了我们的很多负担,帮助我们提高了工作效率。
转载自:https://juejin.cn/post/7224046762200940604