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`;
  }
}
相关文章
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
40508 184
|
11月前
|
消息中间件 JavaScript 关系型数据库
如何开发一套ERP(离散制造-MTO)系统(附架构图+流程图+代码参考)
本文介绍了面向离散制造-MTO(按订单生产)模式的ERP系统设计与实现方法。内容涵盖ERP系统定义、总体架构设计、主要功能模块解析、关键业务流程(订单到交付、BOM展开、MRP逻辑、排产等)、开发技巧(DDD、微服务、事件驱动)、参考代码示例、部署上线注意事项及实施效果评估。旨在帮助企业与开发团队构建高效、灵活、可扩展的ERP系统,提升订单交付能力与客户满意度。
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
1262 6
|
人工智能 JSON 搜索推荐
PowerToys 功能解析:窗口布局、快速启动与更多实用特性,微软官方软件PowerToys增强工具箱,27种功能介绍
Microsoft PowerToys 是一组实用工具,旨在帮助高级用户调整和优化 Windows 体验以提升工作效率。其功能包括:FancyZones(自定义窗口布局)、PowerToys Run(快速启动应用与命令)、Keyboard Manager(键盘按键重映射)、Shortcut Guide(快捷键指南)、文件资源管理器预览面板、颜色拾取器、图像大小调整器、批量重命名工具等。此外还提供 Always On Top、鼠标实用工具、屏幕标尺、文本提取器等功能,满足多样化需求。通过这些工具,用户可实现高效多任务处理、个性化操作及便捷的系统管理。
2955 5
|
JSON 前端开发 JavaScript
前后端对接的常见问题、解决方法及实战心得
本文总结了前后端对接中的常见问题,如接口文档不清、返回格式不统一、参数错误、跨域等,并提供解决方法与实战协作建议,助力高效开发联调。
|
人工智能 JavaScript 开发工具
【完全免费】VS Code 最好用的 12 款 AI 代码提示插件!!!
🎉 探索12款免费VSCode AI代码提示插件:Codeium、Codegeex、CodeFuse、TONGYI Lingma、Comate、iFlyCode、Fitten Code、Bito AI、Mintlify Doc Writer、Kodezi AI、aiXcoder、IntelliCode。这些插件提供智能补全、代码生成、注释、优化,支持多种语言,提升编程效率!🚀👩‍💻👨‍💻
30355 121
|
缓存 NoSQL Redis
[Nestjs] 使用redis的基础配置,以及基本使用的介绍
要在 NestJS 中使用 Redis,需要安装依赖npm install --save redis fastify-redis
972 0
数组方法中的`forEach()`方法和`map()`方法有什么区别?
数组方法中的`forEach()`方法和`map()`方法有什么区别?
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7659 1

热门文章

最新文章