Appearance
@nestjs/common
@nestjs/common
是 NestJS 框架的核心模块之一,包含了构建 NestJS 应用程序的基础设施和常用装饰器、工具类、接口等。它提供了一些常用的功能,用于定义控制器、服务、中间件、守卫、拦截器、管道、异常过滤器等。
主要功能
控制器 (Controllers):
- @Controller:标记一个类为控制器,控制器用于定义处理传入请求的路由和方法。
- HTTP 方法装饰器:如
@Get
、@Post
、@Put
、@Delete
等,用于标记控制器方法对应的 HTTP 请求方法和路由。
提供者 (Providers):
- @Injectable:标记一个类为可注入的服务,服务可以在控制器或其他服务中通过依赖注入的方式使用。
中间件 (Middleware):
- NestMiddleware:接口,用于定义中间件类,实现
use
方法来处理请求。 - MiddlewareConsumer:用于配置中间件在模块中的应用。
- NestMiddleware:接口,用于定义中间件类,实现
守卫 (Guards):
- CanActivate:接口,用于定义守卫类,实现
canActivate
方法来决定请求是否可以继续处理。 - @UseGuards:装饰器,用于在控制器或方法级别应用守卫。
- CanActivate:接口,用于定义守卫类,实现
拦截器 (Interceptors):
- NestInterceptor:接口,用于定义拦截器类,实现
intercept
方法来处理请求和响应。 - @UseInterceptors:装饰器,用于在控制器或方法级别应用拦截器。
- NestInterceptor:接口,用于定义拦截器类,实现
管道 (Pipes):
- PipeTransform:接口,用于定义管道类,实现
transform
方法来转换和验证请求数据。 - @UsePipes:装饰器,用于在控制器或方法级别应用管道。
- PipeTransform:接口,用于定义管道类,实现
异常过滤器 (Exception Filters):
- ExceptionFilter:接口,用于定义异常过滤器类,实现
catch
方法来处理异常。 - @UseFilters:装饰器,用于在控制器或方法级别应用异常过滤器。
- ExceptionFilter:接口,用于定义异常过滤器类,实现
元数据与反射 (Metadata & Reflection):
- ReflectMetadata:装饰器,用于定义自定义元数据。
- Reflector:工具类,用于获取和处理装饰器元数据。
常用装饰器和工具类
- @Inject:用于显式注入依赖。
- @Optional:用于标记可选依赖。
- @Headers:获取请求头信息。
- @Body:获取请求体数据。
- @Query:获取查询参数。
- @Param:获取路由参数。
- @Req:获取请求对象。
- @Res:获取响应对象。
- @Next:获取下一步中间件函数。
代码示例
以下是一个使用 @nestjs/common
构建的简单 NestJS 应用示例:
typescript
import { Module, Injectable, Controller, Get, NestMiddleware, MiddlewareConsumer, NestModule } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
// 服务
@Injectable()
class AppService {
getHello(): string {
return 'Hello World!';
}
}
// 控制器
@Controller()
class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
// 中间件
class LoggerMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
console.log('Request...');
next();
}
}
// 模块
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes(AppController);
}
}
// 创建和启动应用
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
39
40
41
42
43
44
45
46
47
48
49
50
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
39
40
41
42
43
44
45
46
47
48
49
50
详解
服务 (AppService):
@Injectable
装饰器标记 AppService 类为可注入服务。getHello
方法返回字符串 "Hello World!"。
控制器 (AppController):
@Controller
装饰器标记 AppController 类为控制器。@Get
装饰器标记getHello
方法为处理 GET 请求的路由。
中间件 (LoggerMiddleware):
- 实现
NestMiddleware
接口的use
方法,在每个请求前输出日志信息。
- 实现
模块 (AppModule):
@Module
装饰器配置模块的控制器和提供者。- 实现
NestModule
接口的configure
方法,配置 LoggerMiddleware 中间件。
应用启动 (bootstrap):
- 使用
NestFactory.create
方法创建应用实例。 - 通过
app.listen
启动应用监听 3000 端口,并输出应用运行信息。
- 使用
通过 @nestjs/common
提供的这些功能,开发者可以快速构建、配置和管理 NestJS 应用程序,提高开发效率,简化代码结构。