Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)

简介: Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)

一、常用取参方式

  • 请求参数装饰器,Nestexpress 比较:
Nest express 备注
@Request(), @Req() req 请求对象
@Response(), @Res() res 响应对象
@Next() next
@Session() req.session 请求携带的 session
@Param(key?: string) req.params | req.params[key] 获取请求携带的动态参数 xxx/user/dzmdzm 就是动态参数
@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`;
  }
}
相关文章
|
5月前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
54 0
|
11月前
极简了解GET、POST、DELETE、PUT区别
极简了解GET、POST、DELETE、PUT区别
125 0
|
移动开发 Java
java发送post请求,使用multipart/form-data的方式传递参数
java发送post请求,使用multipart/form-data的方式传递参数
1330 0
|
4月前
|
数据采集 监控 JavaScript
函数计算操作报错合集之调用时报错:Error parsing headers: 'limit request headers fields',是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
5月前
|
开发者 UED
Spartacus cart 点了 remove 之后的 HTTP Delete 请求是怎么触发的
Spartacus cart 点了 remove 之后的 HTTP Delete 请求是怎么触发的
|
5月前
|
前端开发 搜索推荐 JavaScript
Spartacus Cart item 点击了 remove 之后 HTTP Delete 请求的触发逻辑 - Adapter
Spartacus Cart item 点击了 remove 之后 HTTP Delete 请求的触发逻辑 - Adapter
|
5月前
|
XML SQL JSON
query 与 params:选择正确的参数传递方式
query 与 params:选择正确的参数传递方式
|
Serverless 开发工具
获取函数执行时的 request_id
获取函数执行时的 request_id
227 0
|
缓存 安全 网络协议
PUT和POST的区别
PUT 和 POST 是 HTTP 协议中两种常用的请求方法。它们有些相似之处,但也有一些重要的区别。在本文中,我们将详细介绍 PUT 和 POST 的区别。
|
前端开发 数据库
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS 在日常的前后端交互,数据请求中最长用的就是Ajax,当然在面试时也经常会被问道请求的方式有哪些?分别什么不同?一般我们都会回答GET请求和POST请求,但其实在后端配置接口时,请求方式不仅这两种,还会有PUT,DELETE,PATCH等,当然我们在开发的时候偶尔也会遇到接口要求使用这几种方式进行请求,下面我们就来讲一讲这几种方式分别有什么不同。 首先先要了解http定义与服务器进行交互的方式,其中基本的有GET,POST,PUT,DELETE,PATCH是后增的方式。同时还要知道URL代表的是 统一资源
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS