第五課:Express框架與RESTful API設計:技術實踐與探索

在使用Node.js進行企業應用開發,常用的開發框架Express,其中的中間件、路由配置與參數解析、RESTful API核心技術尤為重要,本文將深入探討它們在應用開發中的具體使用方法,最后通過Postman來對開發的接口進行測試。

一、Express中間件機制(Middleware)

Express中間件是Express框架的核心特性之一,它允許在請求和響應之間插入處理函數,以實現諸如日志記錄、身份驗證、數據解析等功能。中間件本質上是一個函數,具有訪問請求對象(req)、響應對象(res)以及應用程序請求-響應周期中的下一個中間件函數(通常用next表示)的能力。

中間件的作用
  • 執行日志記錄:記錄每個請求的詳細信息,如請求的URL、方法、時間等。
  • 身份驗證和授權:身份驗證和用戶權限,確保只有經過授權的用戶才能訪問特定資源。
  • 錯誤處理:捕獲并處理請求處理過程中發生的錯誤,避免應用程序崩潰。
  • 數據解析:解析請求體中的數據,如JSON、表單數據等。
中間件的使用

在Express中,可以通過app.use()方法注冊中間件。中間件可以應用于整個應用程序,也可以應用于特定的路由。例如:

const express = require('express');
const app = express();/** 全局中間件,記錄請求日志 */
app.use((req, res, next) => {console.log(`${req.method} ${req.url}`);next();
});/** 路由中間件,解析JSON請求體 */
app.use(express.json());/** 路由處理函數 */
app.post('/user', (req, res) => {console.log(req.body);res.send('User created');
});/** 啟動服務器 */
app.listen(3000, () => {console.log('Server is running on port 3000');
});

二、路由配置與參數解析(req.params/req.body)

Express框架提供了靈活的路由配置機制,允許開發者根據不同的請求路徑和HTTP方法來定義路由處理函數。在路由處理函數中,可以通過req.params和req.body來解析請求參數。

路由配置

在Express中,路由由請求的方法(如GET、POST)、URL路徑和處理函數組成。例如:

/** 定義GET請求接口,獲取動態路由的參數并返回數據給接口調用方 */
app.get('/users/:id', (req, res) => {const userId = req.params.id;res.send(`User ID: ${userId}`);
});/** 定義POST請求接口,獲取請求體的參數并返回數據給接口調用方 */
app.post('/users', (req, res) => {const user = req.body;res.send(`User created: ${user.name}`);
});
參數解析
  • req.params:用于解析URL路徑中的動態參數。例如,在/users/:id路由中,req.params.id將包含URL中的id值。
  • req.body:用于解析請求體中的數據。通常需要使用express.json()或express.urlencoded({ extended: true })中間件來解析JSON或URL編碼的表單數據。

三、RESTful API設計規范

RESTful API是一種基于REST架構風格的網絡服務接口,它使用HTTP協議的標準方法來實現資源的創建、讀取、更新和刪除操作(CRUD)。設計RESTful API時,需要遵循以下原則:

  • 使用HTTP方法:GET用于獲取資源,POST用于創建資源,PUT用于更新資源,DELETE用于刪除資源。
  • 使用名詞而非動詞:資源URL應使用名詞來表示,而不是動詞。例如,使用/users而不是/getUser。
  • 使用URI標識資源:每個資源應有一個唯一的URI。
  • 使用狀態碼表示操作結果:如200表示成功,404表示未找到資源,500表示服務器內部錯誤。
  • 返回JSON格式的數據:RESTful API通常返回JSON格式的數據,以便客戶端解析和處理。
示例

下面是一個簡單的RESTful API示例,包含用戶資源的增刪改查操作:

const express = require('express');
const app = express();
const users = [];
const crypto = require('crypto')/** 獲取所有用戶 */
app.get('/users', (req, res) => {res.json(users);
});/** 創建新用戶 */
app.post('/users', (req, res) => {const newUser = req.body;/** 動態生成用戶唯一編碼 */const uuid = crypto.randomUUID()let nowUser = {...newUser, id: uuid}users.push(nowUser);res.status(201).json(nowUser);
});/** 獲取單個用戶 */
app.get('/users/:id', (req, res) => {const user = users.find(u => u.id === req.params.id);if (user) {res.json(user);} else {/** 設置請求狀態:404 */res.status(404).send('用戶信息不存在');}
});/** 更新用戶信息 */
app.put('/users/:id', (req, res) => {const userIndex = users.findIndex(u => u.id === req.params.id);if (userIndex !== -1) {users[userIndex] = { ...users[userIndex], ...req.body };res.json(users[userIndex]);} else {res.status(404).send('用戶信息不存在');}
});/** 刪除用戶 */
app.delete('/users/:id', (req, res) => {const userIndex = users.findIndex(u => u.id === req.params.id);if (userIndex !== -1) {users.splice(userIndex, 1);res.send('User deleted');} else {res.status(404).send('用戶信息不存在');}
});/** 設置處理請求體數據為json數據對象,可以設置請求體的數據大小 */
app.use(express.json({limit: '50mb'}));app.listen(3000, () => {console.log('服務器運行在端口:3000');
});

四、使用Postman測試接口

Postman是一款強大的API測試工具,允許開發者發送HTTP請求并查看響應結果。使用Postman可以方便地測試Express框架構建的RESTful API。

測試步驟
  1. 安裝并啟動Postman:從Postman官網下載并安裝Postman應用程序,然后啟動它。
  2. 創建新請求:點擊Postman左上角的“New”按鈕,選擇“HTTP Request”來創建一個新的HTTP請求。
  3. 配置請求:
    1. 請求類型:選擇GET、POST、PUT或DELETE等HTTP方法。
    2. URL:輸入API的端點URL,如http://localhost:3000/users。
    3. 請求頭:根據需要添加請求頭,如Content-Type: application/json。
    4. 請求體:對于POST和PUT請求,在“Body”選項卡中選擇“raw”和“JSON”格式,然后輸入請求體數據。
  4. 發送請求:點擊“Send”按鈕發送請求,并在下方查看響應結果。
測試代碼示例

以下是如何使用Postman測試上述RESTful API的示例:

  • 獲取所有用戶:
    • 請求類型:GET
    • URL:http://localhost:3000/users
    • 響應:JSON格式的用戶列表
  • 創建新用戶:
    • 請求類型:POST
    • URL:http://localhost:3000/users
    • 請求頭:Content-Type: application/json
    • 請求體:{"id": 2, "name": "John Doe"}
    • 響應:JSON格式的新用戶信息,狀態碼201
  • 獲取單個用戶:
    • 請求類型:GET
    • URL:http://localhost:3000/users/2
    • 響應:JSON格式的用戶信息或404錯誤
  • 更新用戶信息:
    • 請求類型:PUT
    • URL:http://localhost:3000/users/2
    • 請求頭:Content-Type: application/json
    • 請求體:{"name": "Jane Doe"}
    • 響應:JSON格式的更新后的用戶信息
  • 刪除用戶:
    • 請求類型:DELETE
    • URL:http://localhost:3000/users/2
    • 響應:文本“User deleted”或404錯誤

通過以上步驟和示例代碼,開發者可以方便地使用Postman測試Express框架構建的RESTful API,確保API的功能和性能符合預期。

結論

通過本文,我們深入了解了Node.js的Express框架如何設置開發中間件、接口開發。掌握這些技術將幫助你在Node.js開發中更加高效地進行WebServer應用開發。

關注我!!🫵 持續為你帶來Nodejs相關內容。

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

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

相關文章

mitmproxy配合Wireshark 抓包分析

Mitmproxy 是一款非常強大的 交互式 HTTP 代理 工具,它被廣泛應用于 Web 開發、API 調試、安全測試 等領域。與 Wireshark 側重于被動監聽網絡流量不同,Mitmproxy 更像一個 主動的中間人,可以攔截、檢查、修改和重放 HTTP/HTTPS 流量&#xf…

Varlens(手機上的單反)Ver.1.9.3 高級版.apk

Varlens 是一款專業級手機攝影軟件,旨在通過豐富的功能和高自由度參數調節,讓手機拍攝效果媲美微單相機。以下是核心功能總結: 一、核心功能 專業拍攝模式 支持手動/自動/程序模式,可調節ISO、快門速度、EV、白平衡等參數27 提供…

Scala 中的訪問修飾符

在Scala中,面向對象的權限控制主要通過訪問修飾符來實現。Scala提供了以下幾種訪問修飾符來控制類、對象、成員變量和方法的訪問權限: 1. 默認訪問權限(無修飾符) 如果沒有指定任何訪問修飾符,成員默認是public的&…

第十五屆藍橋杯省賽電子類單片機學習過程記錄(客觀題)

客觀試題: 01.典型的BUCK電源電路包含哪些關鍵器件(ABCD) A. 電容 B. 二極管 C. 電感 D. MOSFET 解析: 典型的 BUCK 電源電路是一種降壓型的直流-直流轉換電路,它包含以下關鍵器件: A.電容:電容在電路中起到濾波的作用。輸入電容用于平滑輸入電壓的波動,減少電源噪聲對…

Dify使用日常:我是如何按標題級別將word中的內容轉存到excel中的

先上效果圖 word中的內容 轉存到excel之后 實現步驟: 1、在dify中創建一個工作流,如上圖 2、在開始節點增加一個支持文件上傳的變量 3、添加文檔提取器,提取上傳的文件中的內容 4、添加大模型節點,將文檔提取器提取出來的內容&…

Vue 框架深度解析:源碼分析與實現原理詳解

文章目錄 一、Vue 核心架構設計1.1 整體架構流程圖1.2 模塊職責劃分 二、響應式系統源碼解析2.1 核心類關系圖2.2 核心源碼分析2.2.1 數據劫持實現2.2.2 依賴收集過程 三、虛擬DOM與Diff算法實現3.1 Diff算法流程圖3.2 核心Diff源碼 四、模板編譯全流程剖析4.1 編譯流程圖4.2 編…

IDEA與Maven使用-學習記錄(持續補充...)

1. 下載與安裝 以ideaIU-2021.3.1為例,安裝步驟: 以管理員身份啟動ideaIU-2021.3.1修改安裝路徑為:D:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1勾選【創建桌面快捷方式】(可選)、【打開文件夾作為項目】&…

認識vue2腳手架

1.認識腳手架結構 使用VSCode將vue項目打開: package.json:包的說明書(包的名字,包的版本,依賴哪些庫)。該文件里有webpack的短命令: serve(啟動內置服務器) build命令…

SQL經典查詢

查詢不在表里的數據,一張學生表,一張學生的選課表,要求查出沒有選課的學生? select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…

《機器學習數學基礎》補充資料:過渡矩陣和坐標變換推導

盡管《機器學習數學基礎》這本書,耗費了比較長的時間和精力,怎奈學識有限,錯誤難免。因此,除了在專門的網頁( 勘誤和修訂 )中發布勘誤和修訂內容之外,對于重大錯誤,我還會以專題的形…

解鎖DeepSpeek-R1大模型微調:從訓練到部署,打造定制化AI會話系統

目錄 1. 前言 2.大模型微調概念簡述 2.1. 按學習范式分類 2.2. 按參數更新范圍分類 2.3. 大模型微調框架簡介 3. DeepSpeek R1大模型微調實戰 3.1.LLaMA-Factory基礎環境安裝 3.1大模型下載 3.2. 大模型訓練 3.3. 大模型部署 3.4. 微調大模型融合基于SpirngBootVue2…

第七課:Python反爬攻防戰:Headers/IP代理與驗證碼

在爬蟲開發過程中,反爬蟲機制成為了我們必須面對的挑戰。本文將深入探討Python爬蟲中常見的反爬機制,并詳細解析如何通過隨機User-Agent生成、代理IP池搭建以及驗證碼識別來應對這些反爬策略。文章將包含完整的示例代碼,幫助讀者更好地理解和…

Vue3——Fragment

文章目錄 一、Fragment的核心意義1. 解決Vue2的單根限制問題2. 減少不必要的 DOM 嵌套3. 語義化和結構化 二、Fragment 的實現原理三、Fragment 使用方式1. 基本用法2. 結合條件渲染3. 動態組件 四、實際應用場景1. 列表/表格組件2. 布局組件3. 語義化標簽 五、注意事項1. 屬性…

字節跳動C++客戶端開發實習生內推-抖音基礎技術

智能手機愛好者和使用者,追求良好的用戶體驗; 具有良好的編程習慣,代碼結構清晰,命名規范; 熟練掌握數據結構與算法、計算機網絡、操作系統、編譯原理等課程; 熟練掌握C/C/OC/Swift一種或多種語言&#xff…

【Linux學習筆記】Linux基本指令分析和權限的概念

【Linux學習筆記】Linux基本指令分析和權限的概念 🔥個人主頁:大白的編程日記 🔥專欄:Linux學習筆記 文章目錄 【Linux學習筆記】Linux基本指令分析和權限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…

數據庫索引的作用:提升數據檢索效率的關鍵

在數據庫管理系統中,數據如同浩瀚海洋中的寶藏,如何快速準確地找到所需信息,成為了一個關鍵問題。這時候,數據庫索引就如同一張精確的航海圖,指引著我們高效地定位數據。那么,數據庫索引究竟是什么&#xf…

Lab18_ SQL injection with filter bypass via XML encoding

文章目錄 前言:進入實驗室構造 payload 前言: 實驗室標題為: 通關 XML 編碼繞過過濾器的 SQL 注入 簡介: 此實驗室的庫存檢查功能中存在 SQL 注入漏洞。查詢結果在應用程序的響應中返回,因此您可以使用 UNION 攻擊…

計算機性能指標(計網筆記)

計算機性能指標:速率、帶寬、吞吐率、時延、時延帶寬積、往返時間RTT、利用率 速率 數據的傳輸速率,單位bit/s,或kbit/s,Mbit/s,Gbit/s 4*10**10bit/s40Gbit/s 常用帶寬單位: 千比每秒kb/s 兆比每秒Mb/s…

同為科技智能PDU在數據中心場景的應用與解決方案

數據中心當前處于一個快速發展和技術變革的特殊時期,全新的人工智能應用正在重塑整個世界,為社會帶來便捷的同時,也為數據中心的發展帶來了新的機遇和挑戰。智能算例的爆發式增長,對數據中心提出了大算力、高性能的新需求&#xf…

藍橋杯 C++ b組 積木畫深度解析

題目大意:有兩種積木塊,I型和L型,給定一段2*N的畫布,問擺滿總共有多少種方式? 解法:狀態壓縮dp(強烈建議拿個筆跟著畫一下狀態,慢慢就懂了) 首先我們規定一下此題解中提…