body Param Query 三個 不同的入參 分別是什么意思 在前端 要怎么傳 這三種不同的參數

在 NestJS 中,@Body()@Param()@Query() 用于處理不同類型的請求參數。以下是它們的含義及前端傳遞方式:


  1. @Body():請求體參數
    ? 含義:用于獲取請求體中的數據(如 POST/PUT 請求中提交的 JSON、表單數據等)。

? 前端傳遞方式:

? 發送 POST/PUT/PATCH 請求,將數據放在請求體中。

? JSON 示例(Axios):

```javascript
axios.post('/api/users', {name: 'John',age: 25
});
```

? 表單數據(如上傳文件):

```javascript
const formData = new FormData();
formData.append('name', 'John');
formData.append('avatar', file);axios.post('/api/upload', formData, {headers: { 'Content-Type': 'multipart/form-data' }
});
```

  1. @Param():路由參數
    ? 含義:獲取 URL 路徑中的動態參數(如 /users/:id 中的 id)。

? 前端傳遞方式:

? 直接在 URL 路徑中傳遞參數,適用于 GET/DELETE 等請求。

? 示例(Axios):

```javascript
axios.get('/api/users/123'); // 匹配路由 `/users/:id`
```

? 后端獲取方式:

```typescript
@Get(':id')
getUser(@Param('id') id: string) {// id = '123'
}
```

  1. @Query():查詢參數
    ? 含義:獲取 URL 中 ? 后的鍵值對參數(如 /users?name=John&age=25)。

? 前端傳遞方式:

? 在 URL 后附加查詢字符串,適用于 GET 請求。

? 示例(Axios):

```javascript
axios.get('/api/users', {params: { name: 'John', page: 2 }
});
// 實際 URL:/api/users?name=John&page=2
```

? 后端獲取方式:

```typescript
@Get()
getUsers(@Query('name') name: string, @Query() query: any) {// name = 'John'// query = { name: 'John', page: '2' }
}
```

總結對比

參數類型裝飾器傳遞位置常見場景示例 URL
Body@Body()請求體(Request Body)提交表單、JSON 數據POST /api/users
Param@Param()URL 路徑中資源標識(如 ID)GET /api/users/123
Query@Query()URL 查詢字符串過濾、分頁、排序GET /api/users?name=John

掌握這些參數的使用方式,能夠更靈活地處理不同場景下的數據傳遞需求。

在 NestJS 中,application/x-www-form-urlencodedapplication/jsonmultipart/form-data 是 HTTP 請求的 Content-Type,它們定義了請求體(@Body())的數據格式。而 @Param()@Query() 與請求體無關,只涉及 URL 路徑參數和查詢參數。以下是它們的聯系與區別:


  1. application/x-www-form-urlencoded
    ? 用途:傳統的表單提交格式,數據會被編碼為鍵值對(類似 URL 查詢參數)。

? 與 @Body() 的關系:

? 數據通過 @Body() 接收。

? 前端傳遞時需設置 Content-Type: application/x-www-form-urlencoded

? 示例(Axios):

```javascript
axios.post('/api/submit', 'name=John&age=25', {headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
```

? NestJS 接收:

```typescript
@Post()
submitForm(@Body() formData: any) {// formData = { name: 'John', age: '25' }
}
```

  1. application/json
    ? 用途:傳遞 JSON 格式的復雜數據(如嵌套對象、數組)。

? 與 @Body() 的關系:

? 數據通過 @Body() 接收,NestJS 會自動解析 JSON。

? 前端需設置 Content-Type: application/json

? 示例(Axios):

```javascript
axios.post('/api/data', { name: 'John', hobbies: ['coding', 'music'] }, {headers: { 'Content-Type': 'application/json' }
});
```

? NestJS 接收:

```typescript
@Post()
submitData(@Body() data: any) {// data = { name: 'John', hobbies: ['coding', 'music'] }
}
```

  1. multipart/form-data
    ? 用途:上傳文件或混合文本和文件數據(如表單包含文件輸入)。

? 與 @Body() 的關系:

? 文本字段通過 @Body() 接收。

? 文件字段需結合 @UploadedFile()@UploadedFiles()(需使用 multer 中間件)。

? 示例(Axios):

```javascript
const formData = new FormData();
formData.append('name', 'John');
formData.append('avatar', file);axios.post('/api/upload', formData, {headers: { 'Content-Type': 'multipart/form-data' }
});
```

? NestJS 接收:

```typescript
@Post()
@UseInterceptors(FileInterceptor('avatar')) // 使用文件攔截器
uploadFile(@Body() formData: { name: string },@UploadedFile() file: Express.Multer.File
) {// formData.name = 'John'// file 包含上傳的文件信息
}
```

  1. @Param()@Query()
    ? 與 Content-Type 無關:

? @Param() 從 URL 路徑中獲取參數(如 /users/:id)。

? @Query() 從 URL 查詢字符串中獲取參數(如 /users?name=John)。

? 示例:

```javascript
// 前端請求
axios.get('/api/users/123?name=John');
```
```typescript
// NestJS 接收
@Get(':id')
getUser(@Param('id') id: string,  // id = '123'@Query('name') name: string // name = 'John'
) {}
```

總結對比

Content-Type數據位置適用場景NestJS 接收方式
application/x-www-form-urlencoded請求體(Body)簡單鍵值對表單提交@Body()
application/json請求體(Body)復雜結構化數據(JSON)@Body()
multipart/form-data請求體(Body)文件上傳或混合數據@Body() + @UploadedFile()
N/AURL 路徑資源標識(如 ID)@Param()
N/AURL 查詢字符串過濾、分頁、排序參數@Query()

關鍵點

  1. @Body() 的形態由 Content-Type 決定:不同 Content-Type 影響請求體的解析方式。
  2. @Param()@Query() 獨立于 Content-Type:它們只處理 URL 路徑和查詢參數。
  3. 文件上傳需特殊處理:使用 multipart/form-data 時,需結合文件攔截器(如 multer)和 @UploadedFile()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78677.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

神經網絡(自己記錄)

一、神經網絡基礎 5分鐘-通俗易懂 - 神經網絡 反向傳播算法(手算)_嗶哩嗶哩_bilibili 二、GAT

Redis Slot 槽位分片具體案例

?鍵值槽位分配案例? 當執行 SET {kaigejava}k1 v1 時,Redis 會提取 {} 內的有效部分 kaigejava,通過 CRC16 算法計算哈希值,再對 16384 取余得到槽位。例如: 若計算結果為 1495,則該鍵會被分配到槽位 1495 對應的節…

【多模態模型】跨模態智能的核心技術與應用實踐

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現(CLIP圖像-文本檢索)運行結果驗證 三、性能對比測試方法論量化數據對比結果…

final static 中是什么final static聯合使用呢

final static 聯合使用詳解 final 和 static 在 Java 中經常一起使用,主要用來定義類級別的常量。這種組合具有兩者的特性: 基本用法 public class Constants {// 典型的 final static 常量定義public static final double PI 3.141592653589793;pub…

1.1 道路結構特征

1.1 道路結構特征 1.城市道路分類 道路網的地位、交通功能、沿線的服務功能。快速路 15 30主干路 15 30次干路 15 20支路 10 20 10(20)瀝青路面、水泥混凝土路面、砌塊路面瀝青路面:瀝青混凝土、瀝青貫入式、瀝青表面處治。瀝青混凝土各種等級、瀝青貫入式和瀝青表面處治支路…

C++如何使用調試器(如GDB、LLDB)進行程序調試保姆級教程(2萬字長文)

C++作為一門高性能、接近底層的編程語言,其復雜性和靈活性為開發者提供了強大的能力,同時也帶來了更高的調試難度。與一些高級語言不同,C++程序往往直接操作內存,涉及指針、引用、多線程等特性,這些都可能成為錯誤的溫床。例如,一個未初始化的指針可能導致程序崩潰,而一…

vite+vue構建的網站項目localhost:5173打不開

原因:關掉了cmd命令提示符,那個端口就沒有被配置上,打開就是這樣的。 解決方法:重新在工作目錄下打開cmd,輸入npm run dev重新啟動項目。 重新出現這樣的界面說明已經成功啟動項目,再次在瀏覽器中刷新并輸入…

自主可控鴻道Intewell工業實時操作系統

鴻道Intewell工業實時操作系統是東土科技旗下科東軟件自主研發的新一代智能工業操作系統,以下是相關介紹: 系統架構 -Intewell-C全實時構型:設備上只運行自研RTOS的全實時系統,適用于有功能安全認證需求的實時控制場景&#xf…

將大語言模型(LLM)應用于自動駕駛(ADAS)中的幾個方向,及相關論文示例

主要方法集中在如何利用LLM的強大推理能力和語言理解能力來增強自動駕駛系統的感知、決策和規劃能力。以下是幾種典型的方法和思路: 1. 基于LLM的駕駛決策與規劃 方法:將LLM作為駕駛決策的核心模塊,利用其強大的推理能力生成駕駛行為或軌跡…

rt-linux下的D狀態的堆棧抓取及TASK_RTLOCK_WAIT狀態

一、背景 在之前的博客 缺頁異常導致的iowait打印出相關文件的絕對路徑-CSDN博客 里的 2.1 一節里的代碼,我們已經有了一個比較強大的抓取D狀態和等IO狀態超過閾值的waker和wakee的堆棧狀態的內核模塊。在之前的博客 增加等IO狀態的喚醒堆棧打印及缺頁異常導致iowa…

【Redis】zset類型

目錄 1、介紹2、底層實現【1】壓縮列表【2】跳躍表哈希表 3、常用命令 1、介紹 有序集合結合了集合和有序列表的特性,每個元素都會關聯一個分數,Redis正是通過這個分數來為集合中的成員進行排序。 2、底層實現 【1】壓縮列表 適用條件 1、元素數量 ≤…

ZeroGrasp:零樣本形狀重建助力機器人抓取

25年4月來自CMU、TRI 和 豐田子公司 Woven 的論文“ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping”。 機器人抓取是具身系統的核心能力。許多方法直接基于部分信息輸出抓取結果,而沒有對場景的幾何形狀進行建模,導致運動效果不…

AI大模型從0到1記錄學習 linux day21

第 1 章 Linux入門 1.1 概述 1.2 Linux和Windows區別 第 2 章 VMware、Ubuntu、Xshell和Xftp安裝 第 3 章 Linux文件與目錄結構 3.1 Linux文件 Linux系統中一切皆文件。 3.2 Linux目錄結構 ? /bin 是Binary的縮寫, 這個目錄存放著最經常使用的命令的可執行文件&#xff0c…

Pytest安裝

一、簡介 pytest是一個非常成熟的全功能的Python測試框架,主要有以下幾個特點:簡單靈活,容易上手支持參數化能夠支持簡單的單元測試和復雜的功能測試,還可以用來做selenium/appnium等自動化測試、接口自動化測試(pytes…

企業網站html源代碼 企業網站管理源碼模板

在數字化轉型加速的今天,企業官網已成為品牌展示與業務拓展的核心陣地。本文將從技術實現角度,解析企業網站HTML基礎架構與管理系統的源碼設計邏輯,為開發者提供可復用的模板化解決方案。 企業網站源碼5000多套:Yunbuluo.Net 一…

特征工程四-1:自定義函數find_similar_docs查找最相似文檔案例

find_similar_docs 函數參數詳解及實際示例 函數參數說明 def find_similar_docs(query, vectorizer, doc_matrix, top_n3):參數類型說明querystr要查詢的文本字符串vectorizerTfidfVectorizer已經訓練好的TF-IDF向量化器doc_matrixscipy.sparse.csr_matrix文檔集的TF-IDF特征…

連鎖美業管理系統「數據分析」的重要作用分析︳博弈美業系統療愈系統分享

?美業管理系統中的數據分析功能在提升運營效率、優化客戶體驗、增強決策科學性等方面具有重要作用。 數據分析功能將美業從“經驗驅動”升級為“數據驅動”,幫助商家在客戶管理、成本控制、服務創新等環節實現精細化運營,最終提升盈利能力與品牌競爭力…

當元數據遇見 AI 運維:智能診斷企業數據資產健康度

在數字化浪潮席卷全球的當下,企業數據資產規模呈指數級增長,然而傳統數據監控方式卻逐漸暴露出諸多弊端。想象一下,在某頭部電商的晨會上,數據工程師小王正經歷職業生涯最尷尬的時刻:“昨天促銷活動的 UV 數據為什么比…

淘寶tb.cn短鏈接生成

淘寶短鏈接簡介 1. 一鍵在線生成淘寶短鏈接tb.cn,m.tb.cn等 2. 支持淘寶優惠券短鏈接等淘寶系的所有網址 3. 生成的淘寶短鏈接是官方的,安全穩定有保證 4.適合多種場景下使用,如:網站推廣,短信推廣 量大提供api接口&#xff0…

【LLM應用開發101】初探RAG

本文是LLM應用開發101系列的先導篇,旨在幫助讀者快速了解LLM應用開發中需要用到的一些基礎知識和工具/組件。 本文將包括以下內容:首先會介紹LLM應用最常見的搜索增強生成RAG,然后引出實現RAG的一個關鍵組件 – 向量數據庫,隨后我們是我們這…