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`;
  }
}
相关文章
|
存储 关系型数据库 MySQL
NestJS 配置 TypeORM 进阶教程
本文介绍了在 NestJS 项目中配置 TypeORM 的三种方式:初级阶段直接在 AppModule 中配置;进阶阶段抽离出独立的 DatabaseModule;进一步使用自定义命名空间将数据库配置分离到单独文件,提升可维护性与模块化程度。
568 3
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
39787 184
|
11月前
|
JSON 前端开发 JavaScript
前后端对接的常见问题、解决方法及实战心得
本文总结了前后端对接中的常见问题,如接口文档不清、返回格式不统一、参数错误、跨域等,并提供解决方法与实战协作建议,助力高效开发联调。
|
11月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
3601 11
|
存储 关系型数据库 MySQL
MySQL 忘记root密码解决方案
【7月更文挑战第19天】
2693 4
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
1179 6
|
算法 Java 测试技术
深度优化OSS上传性能:多线程分片上传 vs 断点续传实战对比
本文深入解析对象存储服务(OSS)文件上传性能优化技术,重点探讨多线程分片上传与断点续传两种方案。通过理论分析、代码实现和性能测试,对比其在不同场景下的表现差异,并提供选型建议与最佳实践,助力提升大文件上传效率与稳定性。
1165 0
|
JavaScript 前端开发 测试技术
拥抱开源:NestJS 在现代后端开发中的应用
【10月更文挑战第21天】NestJS 是一个基于 TypeScript 的现代 Node.js 框架,结合了 OOP、FP 和 FRP 元素,支持模块化设计、控制器、服务和守卫等核心概念,具备强大的依赖注入系统。本文探讨了 NestJS 的核心特性、应用场景及其在现代后端开发中的价值,包括构建 RESTful API、微服务、单页应用后端和企业级应用。通过最佳实践和社区支持,NestJS 可显著提高开发效率和代码质量。