全栈必经之路 Nest !

38 阅读3分钟

不学 Nest 的前端不是好前端,看看 Nest 有哪些好用的东西,很多公司都在使用

image.png

基本概念

controller:控制器,用于处理路由,解析请求参数

handler:控制器里处理路由的方法

service:实现业务逻辑的地方,比如操作数据库等

dto:data transfer object,数据传输对象,用于封装请求体里数据的对象

module:模块,包含 controller、service 等,比如用户模块、书籍模块

entity:对应数据库表的实体

ioc:Inverse of Controller,反转控制或者叫依赖注入,只要声明依赖,运行时 Nest 会自动注入依赖的实例

aop:Aspect Oriented Programming 面向切面编程,在多个请求响应流程中可以复用的逻辑,比如日志记录等,具体包含 middleware、interceotor、guard、exception filter、pipe

nest cli:创建项目、创建模块、创建 controller、创建 service 等都可以用这个 cli 工具来做

nest 应用跑起来后,会从 AppModule 开始解析,初始化 IoC 容器,加载所有的 service 到容器里,然后解析 controller 里的路由,接下来就可以接收请求了。

image.png

这种架构叫做 MVC,也就是 model、view、controller。

controller 接收请求参数,交给 model 处理(model 就是处理 service 业务逻辑,处理 repository 数据库访问),然后返回 view,也就是响应。

应用中会有很多 controller、service,那如果是跨多个 controller 的逻辑呢?

这种在 Nest 提供了 AOP (Aspect Oriented Programming 面向切面编程)的机制

image.png

具体来说,有 Middleware、Guard、Interceptor、Pipe、Exception Filter 这五种。

image.png

Nest CLI

@nestjs/cli 这个包里提供了 nest 命令。

npx @nestjs/cli new 项目名xxx

也可以安装到全局,然后执行,更推荐这种:

npm install -g @nestjs/cli

nest new 项目名

要时不时升级下版本,确保为最新的:

npm update -g @nestjs/cli

安装后查看版本

image.png

node 版本对不上

image.png

有哪些命令 ? nest -h 查看

image.png

image.png

有创建新项目的 nest new,有生成某些代码的 nest generate,还有编译构建的 nest build,开发模式的 nest start 等。

分别看一下:

nest new

image.png

--skip-git 和 --skip-install,就是跳过 git 的初始化,跳过 npm install。

--package-manager 是指定包管理器的,之前创建项目的时候会让我们选择:

image.png

跳过选择指定一个

image.png

--language 可以指定 ts 和 js,一般我们都选择 ts,用默认的就好。

--strict 是指定 ts 的编译选项是否开启严格模式的,有 5 个选项:

image.png

nest generate

nest 命令除了可以生成整个项目外,还可以生成比如 controller、service、module 等。

比如生成 module:

image.png

image.png

image.png

image.png

image.png

image.png

可以生成整个模块

image.png

image.png

选项

image.png

--flat 和 --no-flat 是指定是否生成对应目录的:

image.png

--skip-import 是指定不在 AppModule 里引入:

就不会引入下面这两个

image.png

image.png

--spec 和 --no-spec 是指定是否生成测试文件:

image.png

nest build 打包生成 dist

image.png

--webpack 和 --tsc 是指定用什么编译,默认是 tsc 编译,也可以切换成 webpack。

默认就是 --tsc 产物这样 image.png

image.png

image.png

但是 --watch 默认只是监听 ts、js 文件,加上 --watchAssets 会连别的文件一同监听变化,并输出到 dist 目录,比如 md、yml 等文件

--path 是指定 tsc 配置文件的路径的

那 --config 配置nest cli

nest-cli.json

默认这样

image.png

可以加一些配置 上面命令操作 可以直接在这里配

image.png

nest start 跑起来

image.png

--watch 改动文件之后重新 build --debug 是启动调试的 websocket 服务,用来 debug

nest info

查看项目信息的,包括系统信息、 node、npm 和依赖版本

image.png