一、常用取参方式
-
请求参数装饰器,
Nest
与express
比较:Nest express 备注 @Request()
,@Req()
req
请求对象 @Response()
,@Res()
res
响应对象 @Next()
next
@Session()
req.session
请求携带的 session @Param(key?: string)
req.params
|req.params[key]
获取请求携带的动态参数 xxx/user/dzm
,dzm
就是动态参数@Body(key?: string)
req.body
|req.body[key]
获取请求体参数 @Query(key?: string)
req.query
|req.query[key]
获取 url?id=dzm
携带的参数,通常是get
@Headers(key?: string)
req.headers
|req.headers[key]
请求头内容 @Ip()
req.ip
请求访问 IP
@HostParam()
req.hosts
Nest
为所有标准HTTP
方法提供装饰器@Get()
、@Post()
、@Put()
、@Delete()
、@Patch()
、@Options()
、@Head()
,此外@All()
定义处理所有这些的端点。 -
请求参数场景取法,以
Get
为例,参数按JSON
传入,取值方式也适用其他的的装饰器:import { Controller, Get, Query } from '@nestjs/common'; import { UserService } from './user.service'; @Controller('user') export class UserController { constructor(private readonly userService: UserService) { } @Get('dzm') getDzm(@Query() query: Record<string, any>): string { // 返回传入的整个对象 return JSON.stringify(query) } @Get('dzm1') getDzm1(@Query() query: Record<string, any>): Record<string, any> { // 返回传入的整个对象 return query } @Get('dzm2') getDzm2(@Query('name') name: string): string { // 取传入的指定字段进行返回 return name } }
二、Get
取传案例
-
Get
案例1:@Query
@Get('dzm') getDzm(@Query() query: Record<string, any>): Record<string, any> { // 返回传入的整个对象 return query }
-
Get
案例2:@Body
@Get('dzm') getDzm(@Body() body: Record<string, any>): Record<string, any> { // 返回传入的整个对象 return body }
-
Get
案例3:@Param
、@Body
@Get(':id') getDzm(@Param() param: Record<string, any>, @Body() body: Record<string, any>): Record<string, any> { // 返回传入的整个对象 return { ...param, ...body } }
三、POST
取传案例
-
POST
案例1:@Body
@Post('dzm') getDzm(@Body() body: Record<string, any>): Record<string, any> { // 返回传入的整个对象 return body }
-
POST
案例2:@Param
、@Body
@Post(':id') getDzm(@Param() param: Record<string, any>, @Body() body: Record<string, any>): Record<string, any> { // 返回传入的整个对象 return { ...param, ...body } }
-
其他
@Put、@Delete ...
请求取参也一样。
四、@Request()
、@Response()
案例
@Req()
是@Request()
缩写,@Res()
与@Response()
同理,两者使用并没有什么区别。
@Get('/dzm')
getDzm(@Query() query: any): any {
// 返回传入的整个对象
return query
}
// 上面跟下面这么返回两者接口没有什么区别,只是上面不可以异步返回,下面的可以,看需求使用或者都使用下面这种。
// 下面这种还可以配置其他响应数据属性。
@Get('/dzm')
getDzm(@Req() req: any, @Res() res: any): any {
// 返回传入的整个对象
res.send(req.query)
}
五、完整示例
-
示例代码,例如
@Body
可以按约定的DTO
传入import { Controller, Get, Query, Post, Body, Put, Param, Delete } from '@nestjs/common'; import { CreateCatDto, UpdateCatDto, ListAllEntities } from './dto'; @Controller('cats') export class CatsController { @Post() create(@Body() createCatDto: CreateCatDto) { return 'This action adds a new cat'; } @Get() findAll(@Query() query: ListAllEntities) { return `This action returns all cats (limit: ${query.limit} items)`; } @Get(':id') findOne(@Param('id') id: string) { return `This action returns a #${id} cat`; } @Put(':id') update(@Param('id') id: string, @Body() updateCatDto: UpdateCatDto) { return `This action updates a #${id} cat`; } @Delete(':id') remove(@Param('id') id: string) { return `This action removes a #${id} cat`; } }