Appearance
@Get
@Get 是 NestJS 框架中的一个装饰器,用于将控制器方法映射到 HTTP GET 请求。这个装饰器是由 @nestjs/common 模块提供的。通过使用 @Get 装饰器,可以指定该方法处理特定路径上的 GET 请求。
基本用法
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方法映射到GET /users请求。
处理带参数的 GET 请求
可以通过在 @Get 装饰器中指定路径参数来处理带参数的 GET 请求。
typescript
import { Controller, Get, Param } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns user #${id}`;
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在这个示例中:
@Get(':id')装饰器将findOne方法映射到GET /users/:id请求,其中:id是一个路由参数。@Param('id')装饰器用于提取请求路径中的id参数。
处理带查询参数的 GET 请求
可以通过使用 @Query 装饰器来提取查询参数。
typescript
import { Controller, Get, Query } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
findAll(@Query('age') age: string): string {
return `This action returns users of age ${age}`;
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在这个示例中:
@Query('age')装饰器用于提取请求 URL 中的查询参数age。- 请求
GET /users?age=25将调用findAll方法,并传递age参数的值。
组合使用路径和查询参数
可以同时使用路径参数和查询参数来处理更复杂的请求。
typescript
import { Controller, Get, Param, Query } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get(':id')
findOne(@Param('id') id: string, @Query('includePosts') includePosts: boolean): string {
return `This action returns user #${id} with includePosts=${includePosts}`;
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在这个示例中:
@Get(':id')装饰器将findOne方法映射到GET /users/:id请求。@Param('id')和@Query('includePosts')分别用于提取路径参数和查询参数。
完整示例
以下是一个完整的示例,展示了如何在控制器中使用 @Get 装饰器处理不同的 GET 请求:
typescript
import { Controller, Get, Param, Query } from '@nestjs/common';
@Controller('users')
export class UsersController {
// 处理没有参数的 GET 请求
@Get()
findAll(): string {
return 'This action returns all users';
}
// 处理带路径参数的 GET 请求
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns user #${id}`;
}
// 处理带查询参数的 GET 请求
@Get()
findByAge(@Query('age') age: string): string {
return `This action returns users of age ${age}`;
}
// 处理带路径和查询参数的 GET 请求
@Get(':id/details')
findOneWithDetails(@Param('id') id: string, @Query('includePosts') includePosts: boolean): string {
return `This action returns user #${id} with includePosts=${includePosts}`;
}
}
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
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
在这个示例中:
findAll方法处理没有参数的 GET 请求。findOne方法处理带路径参数的 GET 请求。findByAge方法处理带查询参数的 GET 请求。findOneWithDetails方法处理带路径和查询参数的 GET 请求。
总结
@Get 是一个用于处理 HTTP GET 请求的装饰器,通过它可以轻松地将控制器方法映射到特定的请求路径。通过结合使用 @Param 和 @Query 等装饰器,可以灵活地处理各种类型的 GET 请求。使用 @Get 装饰器,可以使代码更加模块化和易于维护。