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`;
  }
}
相关文章
|
7月前
|
XML JSON API
高效使用 Postman:如何正确传递 Query、Path 和 Body 参数
Postman 作为一个功能强大的工具,极大地简化了 API 测试和调试的过程,提供了发送请求和检查响应的直接方法。本文将着重介绍如何在 Postman 中高效地处理请求参数,以提高 API 测试和开发的便利性。
极简了解GET、POST、DELETE、PUT区别
极简了解GET、POST、DELETE、PUT区别
161 0
什么时候使用PUT?什么时候使用POST?具体使用场景是什么?
什么时候使用PUT?什么时候使用POST?具体使用场景是什么?
1048 0
|
6月前
|
数据采集 监控 JavaScript
函数计算操作报错合集之调用时报错:Error parsing headers: 'limit request headers fields',是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
7月前
|
XML SQL JSON
query 与 params:选择正确的参数传递方式
query 与 params:选择正确的参数传递方式
|
7月前
|
Web App开发 前端开发 JavaScript
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
77 0
|
缓存 安全 数据安全/隐私保护
基本的 HTTP 方法GET、POST、PUT 和 DELETE
HTTP 中有四种基本方法:GET、POST、PUT 和 DELETE。大部分时间我们都使用 GET。它用于任何安全的事情,不会引起任何副作用。GET 能够被添加书签、缓存、链接到代理服务器并通过代理服务器传递。这是一个非常强大的操作,一个非常有用的操作。
421 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
|
JSON Java 测试技术
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求