Skip to content
On this page

@Controller

@Controller 是 NestJS 框架中的一个装饰器,用于定义控制器。控制器是处理传入 HTTP 请求的核心组件。每个控制器负责处理特定的请求路径和相应的 HTTP 方法。控制器使用路由装饰器(如 @Get@Post 等)来定义路由和请求处理方法。

基本使用

typescript
import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }
}

1
2
3
4
5
6
7
8
9
10

在这个示例中:

  • @Controller('users') 装饰器将 UsersController 类标记为一个控制器,并将基本路径设为 users
  • @Get() 装饰器将 findAll 方法映射到 HTTP GET 请求。

详细示例

  1. 定义控制器
typescript
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { CreateUserDto } from './create-user.dto';

@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }

  @Get(':id')
  findOne(@Param('id') id: string): string {
    return `This action returns user #${id}`;
  }

  @Post()
  create(@Body() createUserDto: CreateUserDto): string {
    return 'This action adds a new user';
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

在这个示例中:

  • @Get() 装饰器将 findAll 方法映射到没有参数的 HTTP GET 请求。
  • @Get(':id') 装饰器将 findOne 方法映射到具有 id 参数的 HTTP GET 请求。
  • @Post() 装饰器将 create 方法映射到 HTTP POST 请求,并从请求体中提取数据。
  • 使用 DTO(数据传输对象)
typescript
export class CreateUserDto {
  readonly name: string;
  readonly age: number;
}

1
2
3
4
5

在控制器中,使用 @Body() 装饰器提取请求体数据并将其映射到 DTO。

常用装饰器

  • @Get:处理 HTTP GET 请求。
  • @Post:处理 HTTP POST 请求。
  • @Put:处理 HTTP PUT 请求。
  • @Delete:处理 HTTP DELETE 请求。
  • @Patch:处理 HTTP PATCH 请求。
  • @Param:提取路由参数。
  • @Body:提取请求体数据。
  • @Query:提取查询参数。
  • @Headers:提取请求头。

路由前缀

可以为控制器定义路由前缀,这样所有的路由都将基于该前缀。

typescript
@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }
}

1
2
3
4
5
6
7
8

在这个例子中,UsersController 的所有路由都将基于 users 前缀,例如 GET /users 将调用 findAll 方法。

分组路由

通过路由前缀,可以将相关的路由分组到一个控制器中,便于管理和维护。

typescript
@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }

  @Get(':id')
  findOne(@Param('id') id: string): string {
    return `This action returns user #${id}`;
  }

  @Post()
  create(@Body() createUserDto: CreateUserDto): string {
    return 'This action adds a new user';
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

通过上述代码,GET /users 将调用 findAll 方法,GET /users/:id 将调用 findOne 方法,POST /users 将调用 create 方法。

结论

@Controller 是 NestJS 框架中用于定义控制器的装饰器。控制器负责处理传入的 HTTP 请求,并返回响应。通过使用各种装饰器(如 @Get@Post@Param 等),可以方便地定义和管理路由及其对应的处理方法。控制器将请求映射到处理程序,使得应用程序的结构更加清晰和模块化。

沪ICP备20006251号-1