全栈系列之nestjs快速入门 - 1

214 阅读3分钟

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框架,一个请求的流程:中间件--->守卫--->拦截器--->管道--->控制器--->拦截器--->响应

  1. 收到请求
  2. 全局绑定的中间件
  3. 模块绑定的中间件
  4. 全局守卫
  5. 控制层守卫
  6. 路由守卫
  7. 全局拦截器(控制器之前)
  8. 控制器层拦截器 (控制器之前)
  9. 路由拦截器 (控制器之前)
  10. 全局管道
  11. 控制器管道
  12. 路由管道
  13. 路由参数管道
  14. 控制器(方法处理器)
  15. 路由拦截器(请求之后)
  16. 控制器拦截器 (请求之后)
  17. 全局拦截器 (请求之后)
  18. 异常过滤器 (路由,之后是控制器,之后是全局)
  19. 服务器响应

这里只需要简单了解下流程,后续的章节会一步步解释中间的每一个步骤

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有了一个基本的概念,如果是初学者可能有些懵懵的,但是无所谓。后面会一步步带大家学会如何使用它。本系列不会教具体的原理是如何的,中心思想就是如何让人快速上手这个框架。