Skip to content
On this page

@nestjs/core

@nestjs/core 是 NestJS 框架的核心模块,提供了构建、启动和管理 NestJS 应用程序的基础设施。它包含了一些关键的类、接口和功能,用于处理依赖注入、模块管理、生命周期管理等。下面将详细讲解 @nestjs/core 的主要组成部分和它们的功能。

主要功能和组成部分

1. NestFactory

  • 用于创建和启动 NestJS 应用程序。它提供了静态方法 createcreateMicroservice,用于分别创建标准的 HTTP 应用和微服务应用。
  • 主要方法:
    • create(AppModule): 创建一个 HTTP 应用程序实例。
    • createMicroservice(AppModule, options): 创建一个微服务实例。

2. INestApplication

  • 这是 NestJS 应用实例的接口,定义了应用实例的方法和属性。
  • 主要方法:
    • listen(port, callback): 启动应用并监听指定端口。
    • getHttpServer(): 获取底层的 HTTP 服务器实例。
    • close(): 关闭应用。

3. ModuleRef

  • 模块引用,用于在运行时动态解析和获取模块中的提供者实例。
  • 主要方法:
    • get<T>(type: Type<T> | string | symbol, options?: { strict: boolean }): T: 获取指定类型或标识符的提供者实例。
    • resolve<T>(type: Type<T> | string | symbol, options?: { strict: boolean }): Promise<T>: 异步获取指定类型或标识符的提供者实例。

4. Reflector

  • 反射工具类,用于获取和处理装饰器元数据。在实现守卫、拦截器、管道等功能时,常用于访问自定义元数据。
  • 主要方法:
    • get<T, K>(metadataKey: K, target: Type<any> | Function): T: 获取指定元数据键的值。
    • getAll<T>(metadataKey: any): T[]: 获取所有元数据键的值。

5. 生命周期钩子

  • NestJS 提供了一些生命周期钩子,用于在应用程序的不同阶段执行自定义逻辑。
  • 主要接口:
    • OnModuleInit: 实现 onModuleInit 方法,在模块初始化时执行。
    • OnModuleDestroy: 实现 onModuleDestroy 方法,在模块销毁时执行。
    • OnApplicationBootstrap: 实现 onApplicationBootstrap 方法,在应用程序启动完成时执行。
    • OnApplicationShutdown: 实现 onApplicationShutdown 方法,在应用程序关闭时执行。

代码示例

以下是一个使用 @nestjs/core 构建和启动 NestJS 应用程序的示例:

typescript
import { NestFactory } from '@nestjs/core';
import { Module, Injectable, Controller, Get } from '@nestjs/common';

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

// 控制器
@Controller()
class AppController {
  constructor(private readonly appService: AppService) {}

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

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

// 创建和启动应用
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
  console.log('Application is running on: http://localhost:3000');
}
bootstrap();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

详解

1. 服务 (AppService)

  • @Injectable 装饰器标记 AppService 类为可注入服务。
  • getHello 方法返回字符串 "Hello World!"。

2. 控制器 (AppController)

  • @Controller 装饰器标记 AppController 类为控制器。
  • @Get 装饰器标记 getHello 方法为处理 GET 请求的路由。

3. 模块 (AppModule)

  • @Module 装饰器配置模块的控制器和提供者。

4. 应用启动 (bootstrap)

  • 使用 NestFactory.create 方法创建应用实例。
  • 通过 app.listen 启动应用监听 3000 端口,并输出应用运行信息。

通过 @nestjs/core 提供的这些功能,开发者可以构建、配置和管理 NestJS 应用程序的各个方面,从而实现高效、可扩展的应用开发。

沪ICP备20006251号-1