Appearance
@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
2
3
4
5
6
7
8
9
10
在这个示例中:
@Controller('users')
装饰器将UsersController
类标记为一个控制器,并将基本路径设为users
。@Get()
装饰器将findAll
方法映射到 HTTP GET 请求。
详细示例
- 定义控制器:
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
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
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
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
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
等),可以方便地定义和管理路由及其对应的处理方法。控制器将请求映射到处理程序,使得应用程序的结构更加清晰和模块化。