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`;
  }
}
相关文章
|
6月前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
65 0
|
前端开发 应用服务中间件
SpringMVC 文件上传 消息 Required request part ‘file‘ is not present描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者
SpringMVC 文件上传 消息 Required request part ‘file‘ is not present描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者
1789 0
极简了解GET、POST、DELETE、PUT区别
极简了解GET、POST、DELETE、PUT区别
144 0
|
移动开发 Java
java发送post请求,使用multipart/form-data的方式传递参数
java发送post请求,使用multipart/form-data的方式传递参数
1407 0
Request failed with status code 400,使用axios.post要发送参数,认真比对原项目,看看有没有忘记什么?
Request failed with status code 400,使用axios.post要发送参数,认真比对原项目,看看有没有忘记什么?
|
5月前
|
数据采集 监控 JavaScript
函数计算操作报错合集之调用时报错:Error parsing headers: 'limit request headers fields',是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
6月前
|
XML SQL JSON
query 与 params:选择正确的参数传递方式
query 与 params:选择正确的参数传递方式
|
6月前
|
Web App开发 前端开发 JavaScript
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
70 0
|
Serverless 开发工具
获取函数执行时的 request_id
获取函数执行时的 request_id
239 0
|
缓存 安全 网络协议
PUT和POST的区别
PUT 和 POST 是 HTTP 协议中两种常用的请求方法。它们有些相似之处,但也有一些重要的区别。在本文中,我们将详细介绍 PUT 和 POST 的区别。