Skip to content

NestJS

NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的渐进式框架 。它使用现代 JavaScript,基于 TypeScript 构建,并结合了面向对象编程(OOP)、函数式编程(FP)和函数式响应式编程(FRP)的元素。

核心理念

NestJS 的主要目标是解决 Node.js 生态系统中缺乏成熟架构的问题 。它提供了一个开箱即用的应用程序架构,允许开发人员轻松创建高度可测试、可扩展、松散耦合且易于维护的应用程序。其架构深受 Angular 的启发

主要特性

  • TypeScript 支持: NestJS 完全支持 TypeScript,提供了类型安全和最新的 ECMAScript 功能。
  • 模块化: 应用程序被组织成模块,有助于代码的组织和重用。
  • 依赖注入 (DI): NestJS 内置了强大的依赖注入系统,使得组件之间的解耦和测试变得更加容易
  • 可扩展性: 该框架具有很强的可扩展性,可以与其他库轻松集成。
  • 底层框架: 在底层,NestJS 使用了像 Express(默认)和 Fastify 这样的 HTTP 服务器框架,但对其进行了封装,使其对开发者透明。

基本结构

一个基本的 NestJS 应用程序由以下几个核心部分组成:

  • 模块 (Modules): 使用 @Module() 装饰器组织的类,用于将相关的控制器、服务和提供者组合在一起。
  • 控制器 (Controllers): 负责处理传入的请求并将响应返回给客户端。使用 @Controller() 装饰器定义。
  • 服务 (Services/Providers): 负责处理业务逻辑。服务是提供者的一种,可以使用 @Injectable() 装饰器定义,并通过依赖注入在应用程序的其他地方使用。

示例代码

下面是一个简单的控制器示例,展示了如何处理 GET 请求:

typescript
// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

对应的服务可能如下所示:

typescript
// src/app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

最后,这些部分在根模块中组合在一起:

typescript
// src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

NestJS 通过其结构化的方法,为大型企业级应用提供了坚实的基础