Appearance
@nestjs/core
@nestjs/core
是 NestJS 框架的核心模块,提供了构建、启动和管理 NestJS 应用程序的基础设施。它包含了一些关键的类、接口和功能,用于处理依赖注入、模块管理、生命周期管理等。下面将详细讲解 @nestjs/core
的主要组成部分和它们的功能。
主要功能和组成部分
1. NestFactory:
- 用于创建和启动 NestJS 应用程序。它提供了静态方法
create
和createMicroservice
,用于分别创建标准的 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
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 应用程序的各个方面,从而实现高效、可扩展的应用开发。