Skip to content
On this page

@nestjs/common

@nestjs/common 是 NestJS 框架的核心模块之一,包含了构建 NestJS 应用程序的基础设施和常用装饰器、工具类、接口等。它提供了一些常用的功能,用于定义控制器、服务、中间件、守卫、拦截器、管道、异常过滤器等。

主要功能

  1. 控制器 (Controllers)

    • @Controller:标记一个类为控制器,控制器用于定义处理传入请求的路由和方法。
    • HTTP 方法装饰器:如 @Get@Post@Put@Delete 等,用于标记控制器方法对应的 HTTP 请求方法和路由。
  2. 提供者 (Providers)

    • @Injectable:标记一个类为可注入的服务,服务可以在控制器或其他服务中通过依赖注入的方式使用。
  3. 中间件 (Middleware)

    • NestMiddleware:接口,用于定义中间件类,实现 use 方法来处理请求。
    • MiddlewareConsumer:用于配置中间件在模块中的应用。
  4. 守卫 (Guards)

    • CanActivate:接口,用于定义守卫类,实现 canActivate 方法来决定请求是否可以继续处理。
    • @UseGuards:装饰器,用于在控制器或方法级别应用守卫。
  5. 拦截器 (Interceptors)

    • NestInterceptor:接口,用于定义拦截器类,实现 intercept 方法来处理请求和响应。
    • @UseInterceptors:装饰器,用于在控制器或方法级别应用拦截器。
  6. 管道 (Pipes)

    • PipeTransform:接口,用于定义管道类,实现 transform 方法来转换和验证请求数据。
    • @UsePipes:装饰器,用于在控制器或方法级别应用管道。
  7. 异常过滤器 (Exception Filters)

    • ExceptionFilter:接口,用于定义异常过滤器类,实现 catch 方法来处理异常。
    • @UseFilters:装饰器,用于在控制器或方法级别应用异常过滤器。
  8. 元数据与反射 (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

详解

  1. 服务 (AppService)

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

    • @Controller 装饰器标记 AppController 类为控制器。
    • @Get 装饰器标记 getHello 方法为处理 GET 请求的路由。
  3. 中间件 (LoggerMiddleware)

    • 实现 NestMiddleware 接口的 use 方法,在每个请求前输出日志信息。
  4. 模块 (AppModule)

    • @Module 装饰器配置模块的控制器和提供者。
    • 实现 NestModule 接口的 configure 方法,配置 LoggerMiddleware 中间件。
  5. 应用启动 (bootstrap)

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

通过 @nestjs/common 提供的这些功能,开发者可以快速构建、配置和管理 NestJS 应用程序,提高开发效率,简化代码结构。

沪ICP备20006251号-1