Node.js中的?http?模塊實戰(zhàn)舉例
Node.js 的 http 模塊是 Node.js 內(nèi)置的核心模塊之一,它允許開發(fā)者創(chuàng)建 HTTP 服務(wù)器和客戶端。通過這個模塊,我們可以輕松地處理 HTTP 請求和響應(yīng),構(gòu)建 Web 應(yīng)用程序或 API 服務(wù)。
http 模塊提供了創(chuàng)建服務(wù)器和發(fā)起 HTTP 請求的能力,是構(gòu)建 Web 應(yīng)用的基礎(chǔ)。它支持 HTTP/1.1 協(xié)議,并提供了豐富的 API 來處理各種 HTTP 相關(guān)的操作。
http 模塊是 Node.js 中的核心模塊之一,專門用于構(gòu)建基于 HTTP 的網(wǎng)絡(luò)應(yīng)用程序。它允許創(chuàng)建 HTTP 服務(wù)器和客戶端,處理網(wǎng)絡(luò)請求和響應(yīng)。
1. 核心 API 詳解
1.1. http.createServer([options][, requestListener])
用于創(chuàng)建 HTTP 服務(wù)器的核心方法,返回一個 http.Server 實例,可監(jiān)聽指定端口并處理請求。
- options(可選):用于提供服務(wù)器配置,允許指定 HTTP/1.1、HTTP/2 等協(xié)議。
- requestListener(可選):一個回調(diào)函數(shù),在每次接收到客戶端請求時調(diào)用。
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, world!\n');
});
server.listen(3000, '127.0.0.1', () => {
console.log('Server running at http://127.0.0.1:3000/');
});- req:包含請求的詳細(xì)信息,比如 URL、HTTP 方法、請求頭等。
- res:用于響應(yīng)客戶端請求,可以設(shè)置狀態(tài)碼、響應(yīng)頭以及響應(yīng)體。
1.2.request and response Objects
1. http.IncomingMessage
表示服務(wù)器接收到的請求,是一個可讀流,用于獲取請求體和元數(shù)據(jù)。
常用屬性:
- req.method:請求的方法。
- req.url:請求的路徑和查詢參數(shù)。
- req.headers:請求的頭部信息。
2. http.ServerResponse
表示服務(wù)器對客戶端的響應(yīng),是一個可寫流,用于發(fā)送響應(yīng)數(shù)據(jù)。
常用方法:
- res.writeHead(statusCode[, headers]):設(shè)置狀態(tài)碼和頭部信息。
- res.end([data[, encoding]][, callback]):結(jié)束響應(yīng)并可以發(fā)送數(shù)據(jù)。
1.3. http.request(options[, callback])
用于創(chuàng)建 HTTP 客戶端請求。
const options = {
hostname: 'www.google.com',
port: 80,
path: '/',
method: 'GET',
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log(data);
});
});
req.on('error', (e) => {
console.error(`Problem with request: ${e.message}`);
});
req.end();- options:用于配置請求的目標(biāo)、方法、頭信息等。
- callback:處理響應(yīng)的回調(diào)函數(shù)。
1.4.http.get(options[, callback])
這是一個簡化版的 http.request,專門用于 GET 請求,自動調(diào)用 req.end(),不需要顯式調(diào)用。
http.get('http://www.google.com', (res) => {
res.on('data', (chunk) => {
console.log(`Data chunk: ${chunk}`);
});
res.on('end', () => {
console.log('No more data.');
});
});2. 實戰(zhàn)項目:簡單的 HTTP 服務(wù)器與客戶端
創(chuàng)建一個簡單的 HTTP 服務(wù)器,它可以響應(yīng)客戶端的 GET 和 POST 請求。同時,通過客戶端請求獲取服務(wù)器上的數(shù)據(jù)。
2.1.創(chuàng)建 HTTP 服務(wù)器
在服務(wù)器端,接受 GET 和 POST 請求,并返回不同的響應(yīng)。
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Welcome to the GET request!' }));
} else if (req.method === 'POST' && req.url === '/submit') {
let body = '';
req.on('data', (chunk) => {
body += chunk.toString();
});
req.on('end', () => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Data received!', data: body }));
});
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('404 Not Found');
}
});
server.listen(3000, () => {
console.log('Server listening on port 3000');
});2.2.創(chuàng)建 HTTP 客戶端
客戶端將發(fā)送 GET 和 POST 請求來與服務(wù)器進(jìn)行交互。
const http = require('http');
// Send GET request
http.get('http://localhost:3000', (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('GET Response:', data);
});
});
// Send POST request
const postData = JSON.stringify({ name: 'John', age: 30 });
const options = {
hostname: 'localhost',
port: 3000,
path: '/submit',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': postData.length,
},
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('POST Response:', data);
});
});
req.write(postData);
req.end();通過 http 模塊直接實現(xiàn) WebSocket (WS) 協(xié)議是一項深入底層協(xié)議的工作。WebSocket 是基于 TCP 的協(xié)議,在其通信過程中,依賴于 HTTP 協(xié)議的握手機制,但通信方式和 HTTP 不同,它允許建立一個長期的、雙向的連接。為了實現(xiàn) WebSocket 服務(wù)器,需要結(jié)合對 HTTP 和 WebSocket 握手機制、數(shù)據(jù)幀協(xié)議以及 TCP/IP 模型的理解。
到此這篇關(guān)于Node.js中的 http 模塊詳解的文章就介紹到這了,更多相關(guān)node.js http模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Node中node_modules文件夾及package.json文件的作用說明
這篇文章主要介紹了Node中node_modules文件夾及package.json文件的作用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
node.js中fs文件系統(tǒng)模塊的使用方法實例詳解
這篇文章主要介紹了node.js中fs文件系統(tǒng)模塊的使用方法,結(jié)合實例形式詳細(xì)分析了node.js fs文件系統(tǒng)模塊各種常見方法的基本使用技巧與相關(guān)操作注意事項,需要的朋友可以參考下2020-02-02
Node中Unexpected end of form錯誤的問題分析及解決方案
在Node中我們經(jīng)常會遇到Unexpected end of form 錯誤,這個是由于app.use(upload.any())導(dǎo)致的,這個錯誤通常發(fā)生在 Multer 中間件配置不當(dāng) 或 前端請求數(shù)據(jù)不完整 的情況下,本文給大家介紹了可能的原因和解決方案,需要的朋友可以參考下2025-07-07
node.js中的events.emitter.once方法使用說明
這篇文章主要介紹了node.js中的events.emitter.once方法使用說明,本文介紹了events.emitter.once的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12

