Node.js 程式札記 : Express 路由與請求處理

閱讀時間約 8 分鐘

本文將介紹 Express 如何設置基本路由、處理不同的 HTTP 方法、利用路由參數和查詢字串,以及如何使用請求和回應物件。

基本路由設置

路由決定了應用程式如何回應客戶端對特定 url 的請求,讓我們從最基本的路由設置開始。

創建簡單路由

首先,我們需要安裝 Express 並創建一個基本的應用程式:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
res.send(`歡迎來到首頁!`);
});

app.listen(port, () => {
console.log(`應用程式正在監聽 ${port} 端口`);
});

在這個範例中,我們創建了一個最簡單的路由,它回應根路徑 (/) 的 GET 請求。當用戶訪問首頁時,他們會看到 "歡迎來到首頁!" 的消息。

路由順序的重要性

Express 按照路由定義的順序來匹配請求。因此,更具體的路由應該放在更通用的路由之前:

app.get('/users/admin', (req, res) => {
res.send(`管理員頁面`);
});

app.get('/users/:id', (req, res) => {
res.send(`用戶 ID: ${req.params.id}`);
});

在這個範例中,如果我們將 /users/:id 路由放在 /users/admin 之前,那麼 /users/admin 請求會被 /users/:id 路由處理,這可能不是我們想要的結果。

HTTP 方法(GET, POST, PUT, DELETE)

Express 支持所有標準的 HTTP 方法,讓我們來看看如何使用它們。

GET 請求

GET 請求用於獲取資料:

app.get('/users', (req, res) => {
const users = [{ id: 1, name: '張三' }, { id: 2, name: '李四' }];
res.json(users);
});

POST 請求

POST 請求用於創建新資料:

app.use(express.json()); // 用於解析 JSON 請求體

app.post('/users', (req, res) => {
const newUser = req.body;
console.log('新增用戶:', newUser);
res.status(201).json({ message: '用戶創建成功', user: newUser });
});

PUT 請求

PUT 請求用於更新現有資料:

app.put('/users/:id', (req, res) => {
const userId = req.params.id;
const updatedUser = req.body;
console.log(`更新用戶 ${userId}:`, updatedUser);
res.json({ message: '用戶更新成功', user: updatedUser });
});

DELETE 請求

DELETE 請求用於刪除資料:

app.delete('/users/:id', (req, res) => {
const userId = req.params.id;
console.log(`刪除用戶 ${userId}`);
res.json({ message: '用戶刪除成功' });
});

路由參數和查詢字串

Express 提供了便捷的方式來處理路由參數和查詢字串。

路由參數

路由參數是 URL 路徑的一部分,用冒號 (:) 來定義:

app.get('/products/:category/:id', (req, res) => {
const category = req.params.category;
const productId = req.params.id;
res.send(`你正在查看 ${category} 類別中 ID 為 ${productId} 的產品`);
});

在這個範例中,/products/electronics/123 的請求會匹配這個路由,並且 category 將是 'electronics',productId 將是 '123'。

查詢字串

查詢字串是 URL 中問號 (?) 後面的部分,Express 會自動解析這些參數:

app.get('/search', (req, res) => {
const query = req.query.q;
const page = req.query.page || 1;
res.send(`搜索關鍵字: ${query}, 頁碼: ${page}`);
});

對於 /search?q=express&page=2 的請求,query 將是 'express',page 將是 '2'。

請求(Request)和回應(Response)物件詳解

理解 Request 和 Response 物件是有效處理 HTTP 請求和回應的關鍵。

Request 物件

Request 物件包含了關於 HTTP 請求的所有信息:

app.get('/example', (req, res) => {
console.log('請求方法:', req.method);
console.log('請求路徑:', req.path);
console.log('請求頭:', req.headers);
console.log('查詢參數:', req.query);
console.log('請求體:', req.body);

res.send('請求信息已記錄');
});

Response 物件

Response 物件用於向客戶端發送回應:

app.get('/response-example', (req, res) => {
// 設置狀態碼
res.status(200);

// 設置響應頭
res.set('Content-Type', 'application/json');

// 發送 JSON 回應
res.json({ message: '這是一個 JSON 回應' });

// 或者,你可以使用 res.send() 發送其他類型的回應
// res.send('Hello, World!');

// 重定向
// res.redirect('/new-page');

// 渲染模板(需要設置模板引擎)
// res.render('index', { title: '首頁' });
});

總結

Express 的路由和請求處理,是為了讓開發者構建複雜的 Web 應用程式時變得更加簡單,通過掌握這些基本概念和技術,你就能夠創建可靈活擴展的後端服務。

avatar-img
60會員
91內容數
「梧笙」即「吾生」,意即我的生命,朋友都叫我「阿梧(Awu)」,高雄人。我喜歡學習新技能,從程式設計到網路工具,再到社群經營和影片剪輯。日常興趣是打遊戲、看動漫、讀小說和聽音樂。我會把這些興趣寫成文章,如果你有任何想法或問題,歡迎來信到我的郵箱 aowulife109@gmail.com
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
梧笙の領域展開 的其他內容
Node.js 是一個功能強大的 JavaScript 執行環境,它內建的核心模組讓開發者能夠輕鬆處理檔案系統操作、網路請求和路徑管理等常見需求。本文將介紹三個常用的 Node.js 核心模組,並透過範例程式碼展示它們的基本用法,幫助你快速上手。
Express 是一個簡潔而靈活的 Node.js 網頁應用程式框架,本文將介紹 Express 的基礎知識,包括安裝、路由設定、中介層使用,以及如何搭配 EJS 模板引擎來渲染動態內容。
MongoDB 是一個靈活的 NoSQL 資料庫,這篇文章將帶你了解如何在 Node.js 中操作MongoDB 資料庫,包括基本連接、CRUD操作,以及如何使用 Mongoose ODM 來簡化資料庫操作。
在學習 Node.js 時,異步處理是其中一個非常重要的概念,因為Node.js是一個非阻塞I/O的運行環境,所以理解如何處理異步操作對於開發者來說至關重要。本篇文章將介紹 Node.js 中常見的三種異步處理方式:回調函式、Promise、以及 Async/Await。
由於 Node.js 其非同步和事件驅動的特性,Node.js 特別適合構建高效能的網絡應用程式。本文將介紹 Node.js 的三個基礎概念:事件驅動和非阻塞I/O、模組系統以及 npm 套件管理器。
對於剛開始學習程式設計或想要進一步了解後端開發的人來說,Node.js 是一個非常好的起點。本文將介紹 Node.js 的基本概念、優點以及應用場景,並提供如何在你的電腦上設置開發環境和實作一個簡單的 "Hello World" 範例。
Node.js 是一個功能強大的 JavaScript 執行環境,它內建的核心模組讓開發者能夠輕鬆處理檔案系統操作、網路請求和路徑管理等常見需求。本文將介紹三個常用的 Node.js 核心模組,並透過範例程式碼展示它們的基本用法,幫助你快速上手。
Express 是一個簡潔而靈活的 Node.js 網頁應用程式框架,本文將介紹 Express 的基礎知識,包括安裝、路由設定、中介層使用,以及如何搭配 EJS 模板引擎來渲染動態內容。
MongoDB 是一個靈活的 NoSQL 資料庫,這篇文章將帶你了解如何在 Node.js 中操作MongoDB 資料庫,包括基本連接、CRUD操作,以及如何使用 Mongoose ODM 來簡化資料庫操作。
在學習 Node.js 時,異步處理是其中一個非常重要的概念,因為Node.js是一個非阻塞I/O的運行環境,所以理解如何處理異步操作對於開發者來說至關重要。本篇文章將介紹 Node.js 中常見的三種異步處理方式:回調函式、Promise、以及 Async/Await。
由於 Node.js 其非同步和事件驅動的特性,Node.js 特別適合構建高效能的網絡應用程式。本文將介紹 Node.js 的三個基礎概念:事件驅動和非阻塞I/O、模組系統以及 npm 套件管理器。
對於剛開始學習程式設計或想要進一步了解後端開發的人來說,Node.js 是一個非常好的起點。本文將介紹 Node.js 的基本概念、優點以及應用場景,並提供如何在你的電腦上設置開發環境和實作一個簡單的 "Hello World" 範例。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 什麼是Middleware (中介層)? Middleware 一般翻譯作「中間件」或是「中介軟體」,其實 Express 應用程式就是由一連串的 middleware 串連而成: 從 request 進來到 response 回去會經過一系列的流程。 這個流程會按照路由清單由上而下執行。
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
Thumbnail
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 什麼是Middleware (中介層)? Middleware 一般翻譯作「中間件」或是「中介軟體」,其實 Express 應用程式就是由一連串的 middleware 串連而成: 從 request 進來到 response 回去會經過一系列的流程。 這個流程會按照路由清單由上而下執行。
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
Thumbnail
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(