nestjs搭建通用业务框架(1):基础介绍

在网上看了很多关于nestjs的文章,发现大多数的文章不成体系。所以,打算从应用角度,带领大家一点点的学习nestjs,并架构一套可通用的业务框架,方便大家入门。

本篇是nestjs上手的基础篇,主要从以下的几个角度来谈一谈:

  • What:什么是nestjs
  • Where:什么时候应用nestjs?或者说,什么场景下用它
  • Why:为什么要用nestjs?nestjs可以与哪些技术集成?官方提供了哪些现成的方案?
  • How:怎么入手?基础的搭建与入门

nestjs是什么?

官方定义

下面我们用一张图片来引入,这是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框架的特点:

  • 完美支持 Typescript
  • 面向 AOP 编程
  • 支持 Typeorm
  • 高并发,异步非阻塞 IO
  • Node.js 版的 spring
  • 构建微服务应用

这些全来自于nestjs中文网首页的介绍。

近年发展

近些年来,nestjs从2017年创立的发展非常迅猛,以下是stars增长趋势:

nestjs

目前已经收获了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开发。