不学 Nest 的前端不是好前端,看看 Nest 有哪些好用的东西,很多公司都在使用
基本概念
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 里的路由,接下来就可以接收请求了。
这种架构叫做 MVC,也就是 model、view、controller。
controller 接收请求参数,交给 model 处理(model 就是处理 service 业务逻辑,处理 repository 数据库访问),然后返回 view,也就是响应。
应用中会有很多 controller、service,那如果是跨多个 controller 的逻辑呢?
这种在 Nest 提供了 AOP (Aspect Oriented Programming 面向切面编程)的机制
具体来说,有 Middleware、Guard、Interceptor、Pipe、Exception Filter 这五种。
Nest CLI
@nestjs/cli 这个包里提供了 nest 命令。
npx @nestjs/cli new 项目名xxx
也可以安装到全局,然后执行,更推荐这种:
npm install -g @nestjs/cli
nest new 项目名
要时不时升级下版本,确保为最新的:
npm update -g @nestjs/cli
安装后查看版本
node 版本对不上
有哪些命令 ? nest -h 查看
有创建新项目的 nest new,有生成某些代码的 nest generate,还有编译构建的 nest build,开发模式的 nest start 等。
分别看一下:
nest new
--skip-git 和 --skip-install,就是跳过 git 的初始化,跳过 npm install。
--package-manager 是指定包管理器的,之前创建项目的时候会让我们选择:
跳过选择指定一个
--language 可以指定 ts 和 js,一般我们都选择 ts,用默认的就好。
--strict 是指定 ts 的编译选项是否开启严格模式的,有 5 个选项:
nest generate
nest 命令除了可以生成整个项目外,还可以生成比如 controller、service、module 等。
比如生成 module:
可以生成整个模块
选项
--flat 和 --no-flat 是指定是否生成对应目录的:
--skip-import 是指定不在 AppModule 里引入:
就不会引入下面这两个
--spec 和 --no-spec 是指定是否生成测试文件:
nest build 打包生成 dist
--webpack 和 --tsc 是指定用什么编译,默认是 tsc 编译,也可以切换成 webpack。
默认就是 --tsc 产物这样
但是 --watch 默认只是监听 ts、js 文件,加上 --watchAssets 会连别的文件一同监听变化,并输出到 dist 目录,比如 md、yml 等文件
--path 是指定 tsc 配置文件的路径的
那 --config 配置nest cli
nest-cli.json
默认这样
可以加一些配置 上面命令操作 可以直接在这里配
nest start 跑起来
--watch 改动文件之后重新 build --debug 是启动调试的 websocket 服务,用来 debug
nest info
查看项目信息的,包括系统信息、 node、npm 和依赖版本