欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js中的?http?模塊實戰(zhàn)舉例

 更新時間:2025年09月19日 10:34:22   作者:艾光遠(yuǎn)  
Node.js的http模塊是核心工具,用于創(chuàng)建HTTP服務(wù)器和客戶端,處理請求響應(yīng),支持HTTP/1.1協(xié)議,提供createServer、request等方法,是構(gòu)建Web應(yīng)用的基礎(chǔ),也可結(jié)合實現(xiàn)WebSocket協(xié)議,本文給大家介紹Node.js中的http模塊的相關(guā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)文章

  • Nodejs極簡入門教程(一):模塊機制

    Nodejs極簡入門教程(一):模塊機制

    這篇文章主要介紹了Nodejs極簡入門教程(一):模塊機制,本文講解了模塊基礎(chǔ)知識、模塊的加載、包等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Node.js?Webpack常見的模式詳解

    Node.js?Webpack常見的模式詳解

    這篇文章主要介紹了Node.js?Webpack常見的模式,Webpack的另一個核心是Plugin?,Plugin是可以用于執(zhí)行更加廣泛的任務(wù)如打包優(yōu)化資源管理?環(huán)境變量注入等,需要的朋友可以參考下
    2022-10-10
  • Nodejs之Express中間件的分類介紹

    Nodejs之Express中間件的分類介紹

    這篇文章主要介紹了Nodejs之Express中間件的分類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Node.js返回JSONP詳解

    Node.js返回JSONP詳解

    下面小編就為大家?guī)硪黄狽ode.js返回JSONP詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • node.js操作MongoDB的實例詳解

    node.js操作MongoDB的實例詳解

    這篇文章主要介紹了node.js操作MongoDB的實例詳解的相關(guān)資料,希望通過本能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Node中node_modules文件夾及package.json文件的作用說明

    Node中node_modules文件夾及package.json文件的作用說明

    這篇文章主要介紹了Node中node_modules文件夾及package.json文件的作用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • node.js中fs文件系統(tǒng)模塊的使用方法實例詳解

    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中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
  • nodejs爬蟲初試superagent和cheerio

    nodejs爬蟲初試superagent和cheerio

    這篇文章主要介紹了nodejs爬蟲初試superagent和cheerio的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-03-03
  • node.js中的events.emitter.once方法使用說明

    node.js中的events.emitter.once方法使用說明

    這篇文章主要介紹了node.js中的events.emitter.once方法使用說明,本文介紹了events.emitter.once的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12

最新評論