在 Web 開發領域,HTTP 協議是所有網絡通信的基礎,而 Node.js 則以輕量高效的方式讓開發者可以直接構建 HTTP 服務。相比傳統服務器框架,Node.js 內置的
http模塊無需額外依賴,就能從零搭建一個 Web 服務器,這也是 Node.js 被廣泛使用的重要原因之一。本篇將帶你瞭解http模塊的核心能力、常見使用方式以及實際開發中的關鍵點。
一、HTTP 模塊的作用是什麼?
http 模塊是 Node.js 內置的網絡模塊,用於創建 Web 服務器與發起 HTTP 請求。它主要提供兩類功能:
- 創建 HTTP 服務器(Server):處理客户端請求,返回響應內容。
- 創建 HTTP 客户端(Client):向其他服務器發送 HTTP 請求,如調用外部 API。
通過這個模塊,你可以在沒有任何框架的情況下完成最基礎的 HTTP 通信。
二、用最簡單的方式創建一個 HTTP 服務器
下面是一個最小可運行的 Node.js Web 服務器示例,只需要三行核心代碼即可響應瀏覽器請求。
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
res.end("你好,這是一台 Node.js HTTP 服務器!");
});
server.listen(3000, () => {
console.log("服務器已啓動:http://localhost:3000");
});
運行後,你就擁有了一個基礎 Web 服務,可以處理請求並返回頁面內容。
三、理解請求(Request)與響應(Response)
在回調函數 (req, res) 中:
-
req 表示客户端請求 包含 URL、方法、請求頭等信息 例如:
req.method、req.url -
res 表示返回給客户端的響應 可以設置響應頭、響應內容並結束請求 如:
res.write()、res.end()
示例:根據不同路徑返回內容:
const server = http.createServer((req, res) => {
if (req.url === "/") {
res.end("首頁");
} else if (req.url === "/api") {
res.end(JSON.stringify({ message: "這是 API 接口" }));
} else {
res.statusCode = 404;
res.end("頁面不存在");
}
});
這樣的邏輯是所有 Web 框架(如 Express)的基礎。
四、HTTP 模塊的常用能力
1. 獲取請求內容(包括 POST 數據)
處理 POST 請求通常要自己讀取數據流:
let body = "";
req.on("data", chunk => {
body += chunk;
});
req.on("end", () => {
console.log("收到數據:", body);
res.end("已接收");
});
這是因為 Node.js 的 HTTP 數據是基於流(Stream)的,適合處理大文件或實時數據。
2. 設置響應頭
你可以定製響應類型、狀態碼、編碼等:
res.writeHead(200, {
"Content-Type": "application/json; charset=utf-8"
});
例如 Web API 通常返回 JSON:
res.end(JSON.stringify({ code: 200, msg: "成功" }));
3. 作為客户端發起請求
Node.js 也可以主動去訪問外部服務:
http.get("http://api.example.com/data", resp => {
let data = "";
resp.on("data", chunk => {
data += chunk;
});
resp.on("end", () => {
console.log("外部接口返回:", data);
});
});
相當於瀏覽器的 fetch(),但這是純 Node.js 實現。
五、HTTP 模塊在實際項目中的應用
雖然現在項目多采用 Express、Koa、NestJS 等框架,但底層依然離不開 http 模塊。它在以下場景中仍然非常重要:
- 構建高性能微服務基礎框架
- 自定義底層網絡協議
- 開發中間層 API 網關
- 實現負載均衡代理
- 編寫輕量級調試服務、Mock 服務
理解 HTTP 模塊的工作方式,有助於你更好地掌握 Web 開發的底層機制。
六、總結
Node.js 內置的 http 模塊讓你無需依賴任何第三方庫,就能構建一個完整的 Web 服務。它輕量、靈活、基於事件與流,非常適合高併發場景。熟練掌握 HTTP 模塊,不僅能幫助你構築屬於自己的服務器,也能更深入理解 Express 等框架的內部運作方式。
如果你正在學習 Node.js 或編寫相關書籍,這一章將為後續的 Web 框架、路由系統、API 開發等內容奠定重要基礎。