0、前言
nestjs作为一款高效、可拓展的web框架,受到了许多人的欢迎,而本系列文章就是带大家快速上手这一款web框架。
本章节主要向大家介绍下nestjs,对它有个基本的概念 如果你对下面的内容有些懵懵的,不必理会,后续到了具体的章节还会再讲的
1、介绍
Nest(NestJS)是一个用于构建高效、可扩展 Node.js 服务器端应用程序的框架。它使用渐进式的JavaScript,完全支持并构建于 TypeScript 上(同时仍然允许开发者使用纯JavaScript进行编码),结合了面向对象编程(OOP)、函数式编程(FP)和函数响应式编程(FRP)的元素。
在内部,Nest使用强大的HTTP服务器框架,如 Express(默认)并且可以选择配置为使用 Fastify!
Nest在这些常见的Node.js框架(Express/Fastify)之上提供了一层抽象,同时也直接向开发者暴露了它们的API。这使得开发者可以自由使用众多为底层平台提供的第三方模块。
2、一个请求的生命周期
总结一下:nestjs是一款web框架,一个请求的流程:中间件--->守卫--->拦截器--->管道--->控制器--->拦截器--->响应
- 收到请求
- 全局绑定的中间件
- 模块绑定的中间件
- 全局守卫
- 控制层守卫
- 路由守卫
- 全局拦截器(控制器之前)
- 控制器层拦截器 (控制器之前)
- 路由拦截器 (控制器之前)
- 全局管道
- 控制器管道
- 路由管道
- 路由参数管道
- 控制器(方法处理器)
- 路由拦截器(请求之后)
- 控制器拦截器 (请求之后)
- 全局拦截器 (请求之后)
- 异常过滤器 (路由,之后是控制器,之后是全局)
- 服务器响应
这里只需要简单了解下流程,后续的章节会一步步解释中间的每一个步骤
3、依赖注入
依赖注入(Dependency Injection,DI)是一种设计模式,用于实现控制反转(Inversion of Control,IoC)。它使得一个对象不需要自己创建其依赖的对象,而是通过外部提供这些依赖,从而提高了代码的可测试性和可维护性。
在依赖注入中,依赖关系被“注入”到需要它们的类中,而不是在类内部创建依赖。这使得类之间的耦合度降低,便于进行单元测试和替换依赖。
nestjs里大量的使用了依赖注入,下面是一个简单的例子
// 这是一段nestjs的代码,现在只是作为演示
@Injectable()
export class TestService {
// 通过依赖注入自动将LoggerService实例化出来
constructor(private readonly logger: LoggerService) {}
async test() {
this.logger.log('测试')
}
...
}
4、前置准备
3.1、安装nestjs脚手架
npm i -g @nestjs/cli pnpm
到了这一步,前期的准备就搞定了。也基本对nestjs有了一个基本的概念,如果是初学者可能有些懵懵的,但是无所谓。后面会一步步带大家学会如何使用它。本系列不会教具体的原理是如何的,中心思想就是如何让人快速上手这个框架。