NestJS 学习笔记
Official websie:https://docs.nestjs.com/
Node Version: 20.11.1
Nestjs Version: 10.0.0
1、创建项目
# 安装脚手架
npm i -g @nestjs/cli
# 创建项目
nest new project-name
# 创建module
nest generate module openapi
# 创建cotroller
nest generate controller user
# 创建service
nest g service user
2、运行
1. 创建 openapi module
2. 修改package.js,添加运行命令
"start:openapi": "nest start openapi --debug 9230 --watch",
3. 在main.openapi.ts文件中引入OpenApiModule。
4. 在nest-cli.json文件中配置projects,添加openapi。
5. 创建一个tsconfig.openapi.json文件,配置openapi项目的一些配置,例如包含哪些文件,排除哪些问题。
3、依赖注入
1. 创建好的Controller以及Service要在OpenApiModule进行注入。
2. 如果在Controller中要使用Service,则直接在构造函数中获取实例即可。
4、拦截器
1. Nestjs自带拦截器接口,直接实现它就行
2. 定义好拦截器以后,在Controller中直接使用即可
5、守卫
1. Nestjs自带Gard,实现CanActivate接口就可以了。
2. 实现后在Controller中直接使用即可(也可加在方法上面)。
6、拦截器和守卫的简单区别
- 守卫(
CanActivate
):决定请求是否应该被处理,主要用于权限控制。 - 拦截器(
NestInterceptor
):修改请求或响应数据,用于日志记录、数据转换等,不阻止请求的处理。
7、NestJs 钩子函数
1. OnModuleInit
onModuleInit()
是在模块初始化完成后调用的,但它比 onApplicationBootstrap()
早执行。这意味着,如果你的代码需要在模块初始化后但在应用完全启动前执行,onModuleInit()
可能是一个不错的选择。
2. onApplicationBootstrap
onApplicationBootstrap()
在应用程序启动完成后调用,但在HTTP服务器监听端口之前。这允许你在应用启动但还未开始接受HTTP请求时执行代码。
3. Middleware
中间件可以拦截进入应用的请求,并在请求被路由到相应的控制器之前执行代码。
4. 拦截器 (Interceptors)
拦截器可以在请求到达控制器之前和之后执行,通常用于修改请求/响应对象。
5. 守卫 (Guards)
守卫是在请求到达控制器之前检查某些条件是否满足,常用于权限控制。
触发顺序:main.ts (方法自定义)-> onModuleInit -> onApplicationBootstrap -> Middleware -> guard -> intercept