nestjs搭建通用业务框架(1):基础介绍
在网上看了很多关于nestjs的文章,发现大多数的文章不成体系。所以,打算从应用角度,带领大家一点点的学习nestjs,并架构一套可通用的业务框架,方便大家入门。
本篇是nestjs上手的基础篇,主要从以下的几个角度来谈一谈:
- What:什么是nestjs
- Where:什么时候应用nestjs?或者说,什么场景下用它
- Why:为什么要用nestjs?nestjs可以与哪些技术集成?官方提供了哪些现成的方案?
- How:怎么入手?基础的搭建与入门
nestjs是什么?
官方定义
下面我们用一张图片来引入,这是nestjs官网的截图:
其中有对nestjs的定义:
Hello, nest!
A progressive Node.js framework for building efficient, reliable and scalable server-side applications.
翻译过来就是:用于构建高效且可伸缩的服务端应用程序的渐进式 Node.js 框架。
从上面定义我们可以拆解出来nestjs框架的一些基础的特性:
- Node.js:首先,它基于Node.js的环境,是对前端友好的。前端工程师无需再继续学习其他的语言(PS: 不代表不需要了解框架),即可以上手;
- 服务端应用程序:nestjs基础的功能是用于开发接口;
- 高效且可伸缩:这一点,可以看出,nestjs的各个功能模块之间的架构应该是解耦的,而且是易于进行组合的;
- 渐进式:可简单,可复杂,根据大家自己的项目的复杂度。
nestjs特点
除了从上面的定义上我们进行的主观拆解,那nestjs还具有哪些特点呢?
nestjs框架的特点:
这些全来自于nestjs中文网首页的介绍。
近年发展
近些年来,nestjs从2017年创立的发展非常迅猛,以下是stars增长趋势:
目前已经收获了35,152个点赞,来源:StarTrack
然后再看看npm的趋势与其他的几个库的比较:
- express 2010年1月发布(点赞52.2k)
- meteor 2012年发布(自成一套下载安装,非npm,点赞42k)
- koa 2013年11月发布(点赞30.8k)
- egg.js 2016年7月发布(点赞16.8k)
(截止北京时间2021年03月08日 21:53:36)
nestjs应用场景
这个部分我年过很多人写的内容,其实技术上,前端人喜欢看新的特点——技术新、更新勤。
追新不能盲目,而是要从现实的角度出发,解决问题才是最终目的。
基本应用:服务端项目开发完成接口功能;
服务端扩展:安全、鉴权、队列、日志、性能、测试、消息;
技术架构:微服务、TypeORM+序列化对接多种数据库、多环境配置、AOP编程、MVC基本模型;
一些成功的案例:
官方地址:Who is using Nest?
大家可以从其技术特点的角度出发,从自己的团队的技术实力与项目的复杂度出发进行综合考虑。
“convention over configuration”——Jeremy Miller
对于nestjs来说,大多数前端同学可能不习惯的点:
- MVC分层与模块化思想
- ts静态类型检查 + 注解 + AOP编程
- ORM框架的概念的理解与使用
- 服务端架构 与需要考虑到的:安全、日志、性能、监控等
- 运维相关
nestjs框架关联技术
打开nestjs的官方github仓库,可以看到很多官方提供的方案:
- CLI: 官方的CLI工具
- TypeORM: 对接各式各样的数据库
- Serverless:微服务
- Swagger:用于产生API接口文档
- Sequelize:序列化
- Mongoose
- GraphQL
- Jwt/passport:鉴权模块
- ElasticSearch:搜索模块
- Config:配置模块,用于多环境配置
- ….
从官方的仓库的更新的频次,可以看到社区的活跃。而且,拥有的众多成熟方案 + 丰富的文档,让nestjs在国外的发展非常的好。
而且,从相关概念上来说,对于前端同学走向全栈,可以打开关于服务端架构层面的视野。大家可以关注一下如下的这个资源:相关资料
这个资源是nestjs中文网整理的,包括社区、示例项目、常用库、难点技术集成等,比如:状态管理、代码风格、邮件、API、错误统一处理、Lint、路由、日志 + 监控、国际化、鉴权等。
nestjs的前景怎么样
我们先看看使用了的同学们,大家怎么评价:
同学A:
我认为框架有两个优点 第一 蹭了一波 typescript 的热度。 第二 它的标准化使的开发的流程非常方便,特别是针对流动性比较大的公司来说这是个好事,koa 和 express 你非常自由这导致了大家开发的时候有自己的一套开发方式(比如,不同的分层,文件命名,项目整体结构),如果制定项目的人走了,经过几波换人会不会把这个项目改的面目全非?
同学B:
nestjs在国内的未来不见得会很好,因为缺少布道者,另一方面是国内有阿里egg.js、midway的竞争。如果从企业级开发的角度来看,nest.js的理念比其他node.js web框架都好太多了
同学C:
nest.js的更新非常非常的频繁,这说明社区活跃度很高。我们团队18年刚开始用的egg.js,我为此开发了上层的框架,后来发现nest.js早就把这些事情都做好了,比如装饰器路由、Exception filters、Pipes、Guards、Interceptors,
同学D:
挺好的,但如果不熟悉 JavaSpring 的话, 上手需要一定成本。不过我觉得挺像 Midway.js,我 IOC 是看 Midway 的,有这一专题的文档,你可以找找看。nestjs 的生态是基于 Express, Midway 是基于 koa 和阿里的 egg。
….
大家的褒贬不一,总结一下。
优点:
- 官方社区活跃
- 框架架构设计合理,对于大型项目非常利于整体的统一;
- 成熟的官方解决方案
- ts加持;
缺点:
- 上手有一定的难度
- 后期相关的开发人员的缺乏
nestjs学习资源
- 官方资源
- 文档
- 社区
下面一篇,我们来介绍使用@nestjs/cli上手nestjs开发。