在网上看了很多关于nestjs的文章发现大多数的文章不成体系。所以打算从应用角度带领大家一点点的学习nestjs并架构一套可通用的业务框架方便大家入门。
本篇是nestjs上手的基础篇主要从以下的几个角度来谈一谈
What什么是nestjs
Where什么时候应用nestjs或者说什么场景下用它
Why为什么要用nestjsnestjs可以与哪些技术集成官方提供了哪些现成的方案
How怎么入手基础的搭建与入门
下面我们用一张图片来引入这是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框架的特点
完美支持 Typescript
面向 AOP 编程
支持 Typeorm
高并发异步非阻塞 IO
Node.js 版的 spring
构建微服务应用
这些全来自于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
这个部分我年过很多人写的内容其实技术上前端人喜欢看新的特点——技术新、更新勤。
追新不能盲目而是要从现实的角度出发解决问题才是最终目的。
基本应用服务端项目开发完成接口功能
服务端扩展安全、鉴权、队列、日志、性能、测试、消息
技术架构微服务、TypeORM+序列化对接多种数据库、多环境配置、AOP编程、MVC基本模型
一些成功的案例
官方地址Who is using Nest?
大家可以从其技术特点的角度出发从自己的团队的技术实力与项目的复杂度出发进行综合考虑。
“convention over configuration”——Jeremy Miller
对于nestjs来说大多数前端同学可能不习惯的点
MVC分层与模块化思想
ts静态类型检查 + 注解 + AOP编程
ORM框架的概念的理解与使用
服务端架构 与需要考虑到的安全、日志、性能、监控等
运维相关
打开nestjs的官方github仓库可以看到很多官方提供的方案
CLI: 官方的CLI工具
TypeORM: 对接各式各样的数据库
Serverless微服务
Swagger用于产生API接口文档
Sequelize序列化
Mongoose
GraphQL
Jwt/passport鉴权模块
ElasticSearch搜索模块
Config配置模块用于多环境配置
….
从官方的仓库的更新的频次可以看到社区的活跃。而且拥有的众多成熟方案 + 丰富的文档让nestjs在国外的发展非常的好。
而且从相关概念上来说对于前端同学走向全栈可以打开关于服务端架构层面的视野。大家可以关注一下如下的这个资源相关资料
这个资源是nestjs中文网整理的包括社区、示例项目、常用库、难点技术集成等比如状态管理、代码风格、邮件、API、错误统一处理、Lint、路由、日志 + 监控、国际化、鉴权等。
我们先看看使用了的同学们大家怎么评价
同学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加持
缺点
上手有一定的难度
后期相关的开发人员的缺乏
官方资源
官方网站
官方文档
API 参考
GitHub Repo
文档
中文文档 推荐
相关资料
社区
中文交流群
Gitter
Discord
Telegram (社区维护)
Telegram (俄罗斯社区)
Slack (韩语社区)
QQ 群 (中文社区)
Reddit (社区维护)
下面一篇我们来介绍使用@nestjs/cli上手nestjs开发。