Node.js(4)—— http模塊基礎

下面我們來學nodejs中的http模塊。在此之前,你需要有一定的網絡知識儲備,能知道http,IP,端口是什么并且它們之間的關系。如果還不清楚或比較模糊,可以查看下面的文章:
HTTP協議與IP

下面我們開始學習。

目錄

創建一個HTTP服務端

向本機端口發送請求

HTTP服務的注意事項

1、如何關閉服務器?

2、如何實現代碼的修改更新?

3、響應內容中文亂碼

4、端口號被占用

5、HTTP協議默認端口

在瀏覽器中查看報文


?

創建一個HTTP服務端

有了HTTP服務端后,我們就能處理瀏覽器發送過來的請求,并且可以返回響應。和前端開發不同,我們無法隨時在瀏覽器中渲染看到我們編寫的結果,因此我們需要逐漸習慣后端開發時的編寫習慣。

1、導入http模塊

const http = require('http');

這部分和之前的導入模塊相同。

2、創建服務對象

創建服務對象我們使用 createServer 方法來創建,其返回結果為一個對象。代碼為:

const server = http.createServer();

該方法有一個實參,它是一個函數;該函數又接受兩個形參,為 request 和 response。request是瀏覽器發送的請求報文的封裝對象,可以獲取到請求報文的相關內容。

而response則是對響應報文的封裝對象,可以為瀏覽器設置響應結果。

這里我們說明一下,request和rresponse只是參數名稱,我們可以自己為參數命名。

下面我們簡單書寫一下函數:

const server = http.createServer((request,response) => {response.end('Hello HTTP Server');//設置響應體并結束響應
});

后面我們還會詳細講解如何去編寫,這里我們就留個印象,要知道這么寫的目的是什么。

3、監聽端口,啟動服務

直接看代碼:

server.listen();

listen是對象里面的一個方法,需要往里面傳入兩個參數:一個數值和回調函數。具體如下:

server.listen(9000,() => {console.log('服務器已成功啟動...');
});

數值表示端口號,上面代碼表示端口號為9000。當然其他端口也可行,這里我們選取9000。直接運行上述代碼查看結果:

這樣我們就成功運行了。當服務器啟動成功以后才會執行回調函數內的代碼。(response)

現在,端口9000就已經被我們的服務器占用了。將來只要有程序往9000端口發送http請求,回調函數就就會被執行。我們知道,瀏覽器會向服務器發送http請求;下面我們使用本機的IP試著發送請求。

向本機端口發送請求

向本機端口發送請求,我們首先要知道本機的IP地址。而本機回環地址就是我們當前計算機,即本機的地址。IP為:127.0.0.1。下面我們打開瀏覽器,輸入IP發送我們的http請求。

http://127.0.0.1:9000/

在網址欄輸入上述代碼,跳轉后我們就能看到執行了回調函數之后的頁面。

HTTP服務的注意事項

1、如何關閉服務器?

啟動服務之后,我們使用 Crtl + C 就能停止運行。

2、如何實現代碼的修改更新?

如果我們想對代碼進行修改后服務器也會做出對應修改該怎么辦呢?比如我們把之前的 'Hello HTTP Server' 修改為'Hello World!':

const http = require('http');
const server = http.createServer((request,response) => {response.end('Hello World!');//設置響應體并結束響應
});
server.listen(9000,() => {console.log('服務器已成功啟動...');
});

直接修改后發現頁面沒有變化。這時我們需要關閉當前服務器并再次啟動才會實現更新。即重啟服務。

3、響應內容中文亂碼

我們再次修改文本內容,這次我們使用中文 “你好” 來替換文本。

response.end('你好');

重啟服務器,發現出現了奇怪的結果:

感興趣可以多嘗試一些中文文本,會看到都會出現亂碼。這里是因為字符集的問題。我們在前面多加入一行代碼:

response.setHeader('content-type','text/html;charset=utf-8');

這段代碼是什么意思呢?它表示在發送請求報文時,多加入一個鍵名為 conten.type 的響應頭;返回的內為HTML,并且字符的格式為 utf-8 。這樣瀏覽器就會按照utf-8字符集的規范來解析字符了。下面我們重啟一下服務,發現回歸正常:

4、端口號被占用

我們在vscode中保持服務器不斷開,新打開一個終端,啟動文件會發現出現報錯:

這時就是端口已經被占用的情況。我們在另一個終端已經使用了9000端口,不能再被其他的使用。解決這個問題有兩個方法,一是停止正在啟動的端口;二是修改端口號。

5、HTTP協議默認端口

HTTP協議的默認端口為80。如果我們不設置端口號,請求就會默認向80端口發送請求。再補充一下 https協議的默認端口為443。

在瀏覽器中查看報文

我們在之前運行的頁面上打開控制臺應用,選擇網絡:

之后我們啟動服務器就能看到出現了兩個請求:

我們先看下面那個 favicon.ico ,這個其實是谷歌瀏覽器的默認行為,在打開網頁時它都會發送這樣一個請求。

我們再來看向本機發送的請求,有三個大的分類項;我們打開請求標頭,就能看到報文的內容了。但打開后發現沒有請求行,我們點擊原始(源代碼),就能看到初始的代碼,也就能看見請求行了。

那么請求體怎么看呢?我們需要另外建立一個文件:

如圖所示我們快速建立一個html文件,如下書寫一個表單:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="http://127.0.0.1:9000" method="post"><input type="text" name="username"><input type="password" name="password"><input type="submit" value="提交"></form>
</body>
</html>

之后打開網頁,輸入對應的信息后提交后就會像對應端口發送一個Post請求。

提交后我們能在控制臺看到多出來一個“負載”標簽頁,里面存放我們剛剛輸入的信息:

這就是格式化之后的請求體內容。如果想要查看原始的內容,點擊查看源即可:

username=123&password=123456

?

?

?

?

?

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

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

相關文章

后端去拿數據怎么拿?

簡單來說&#xff0c;Entity 和 DTO 代表了數據在不同層次和場景下的不同形態和目的。它們最根本的區別在于&#xff1a;職責和目的不同。一句話概括Entity&#xff1a;代表數據庫中的表&#xff0c;是業務邏輯的核心&#xff0c;與持久化&#xff08;數據庫&#xff09;緊密相…

從源碼角度來學習Activit的啟動流程

免責聲明&#xff1a;本文是本人的學習記錄文檔&#xff0c;有問題可以評論區指出&#xff0c;謝謝 一、從Launcher點擊桌面圖標&#xff0c;拉起app進程&#xff08;不同進程間拉組件&#xff09; 從桌面點擊icon圖標拉起進程&#xff0c;這個就涉及到很多邏輯了&#xff0c;我…

pgAdmin介紹(PostgreSQL數據庫管理軟件)數據庫客戶端、PG客戶端、PostgreSQL客戶端

文章目錄**1. 安裝 pgAdmin****1.1 下載****1.2 安裝步驟&#xff08;以 Windows 為例&#xff09;**1. **運行安裝程序**&#xff1a;雙擊下載的 .exe 文件。2. **接受協議**&#xff1a;點擊 Next&#xff0c;勾選 I accept the agreement。3. **選擇安裝路徑**&#xff1a;默…

桌面GIS軟件FlatGeobuf轉Shapefile代碼分享

桌面GIS軟件FlatGeobuf轉Shapefile代碼分享1、后端代碼分享2、前端代碼分享分享完成

【Bluedroid】A2DP Source 音頻傳輸停止流程及資源管理機制(btif_a2dp_source_stop_audio_req)

本文深入剖析Android藍牙協議棧中A2DP音頻傳輸停止流程,涵蓋從用戶請求觸發、工作線程調度、資源釋放到性能統計的全鏈路實現。通過分析btif_a2dp_source_stop_audio_req到btif_a2dp_source_audio_tx_stop_event的代碼執行路徑,揭示多線程環境下的競爭規避策略、硬件抽象層(H…

1-ruby介紹、環境搭建、運行 hello world 程序

1-ruby介紹、環境搭建、運行 hello world 程序 Ruby 簡介 Ruby 是一種開源的、面向對象的、解釋型的動態編程語言&#xff0c;由 Yukihiro “Matz” Matsumoto 于 1995 年發布。主要特點包括&#xff1a; 純面向對象&#xff1a;所有東西都是對象動態類型&#xff1a;變量不…

PPO、DPO和GRPO的區別

一、 核心思想一句話概括 首先&#xff0c;我們用三個比喻來快速理解它們的核心思想&#xff1a;PPO (近端策略優化)&#xff1a; 「比武招親」 模型&#xff08;AI&#xff09;通過試錯和與裁判&#xff08;獎勵模型&#xff09;的互動來學習。它生成多個回答&#xff0c;裁判…

使用組合子構建抽象語法樹

引言 組合子&#xff08;Combinator&#xff09;是一種函數式編程中的概念&#xff0c;它允許我們通過組合簡單的函數來構建復雜的邏輯。在解析器和抽象語法樹&#xff08;AST&#xff09;的構建中&#xff0c;組合子提供了一種簡潔且模塊化的方法。本文將介紹如何使用組合子來…

20.27《24GB顯卡輕松訓練ChatGLM3-6B!QLoRA極速微調實戰指南》

24GB顯卡輕松訓練ChatGLM3-6B!QLoRA極速微調實戰指南 import torch from transformers import AutoModel, AutoTokenizer, BitsAndBytesConfig# 配置4-bit量化參數 bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_use_double_quant=True

JSP 輸出語法全面解析

JSP 輸出語法全面解析 JSP 提供了多種輸出內容到響應流的方式&#xff0c;每種方式都有其特定的使用場景和特點。以下是 JSP 輸出語法的詳細解析。 總結 JSP直接編寫普通字符串 翻譯到service方法的out.write(“這里面”) <%%> 翻譯到service方法體內部&#xff0c;里面是…

前端學習——CSS

前面我們已經學習過來HTML。但是對于前端網頁來說&#xff0c;HTML只是網頁的骨架。而只是使用HTML的網頁是十分簡陋的&#xff0c;一般沒辦法應用于實際應用。因此我們還要學習CSS對網頁進行美化。 相關代碼已經上傳至gitee&#xff1a;前端學習代碼: 前端學習&#xff0c;喜歡…

【stm32】對射式紅外傳感器計次以及旋轉編碼器計次

對射式紅外傳感器計次 1. 將傳感器的功能分裝在一個模塊里CountsSenser2.配置外部中斷1.配置RCC&#xff0c;將涉及的外設的時鐘都打開 2.配置GPIO&#xff0c;選擇端口為輸入模式 3.配置AFIO&#xff0c;選擇前面使用的一路GPIO,連接到后面的EXTI 4.配置EXTI&#xff0c;選擇邊…

人工智能學習:Python相關面試題

1、Python與其他語言&#xff08;如Java/C&#xff09;的核心區別是什么&#xff1f;Python是動態類型的解釋型語言&#xff0c;語法簡潔&#xff0c;支持多種編程范式&#xff08;面向對象、函數式、過程式&#xff09;。與Java相比&#xff0c; Python無需編譯且語法更簡潔&a…

【Canvas與旗幟】哥倫比亞旗圓餅

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>哥倫比亞旗圓餅 Draft1</title><style type"text/css&qu…

Linux 系統 poll 與 epoll 機制2:實現原理與應用實踐

接上文poll機制&#xff1a;Linux 系統 poll 與 epoll 機制1。 3. epoll 機制&#xff1a;高并發 I/O 的優化實現? epoll(Efficient event polling implementation)機制誕生于 Linux 2.5.44 版本&#xff0c;是內核為解決高并發 I/O 場景&#xff08;如萬級以上 FD 監聽&…

Mamba LLM 架構簡介:機器學習的新范式

Mamba LLM 架構簡介&#xff1a;機器學習的新范式探索 Mamba LLM 的強大功能&#xff0c;Mamba LLM 是來自一流大學的變革性架構&#xff0c;重新定義了 AI 中的序列處理。語言模型是一種經過訓練的機器學習模型&#xff0c;用于在自然語言上執行概率分布。它們的架構主要由多層…

GaussDB生產擴容引起的PANIC問題處理案例

1 環境信息CPU:8C內存&#xff1a;64GGaussDB版本&#xff1a;24.7.32解決方案部署形態&#xff1a;HCS部署形態&#xff1a;1主1從1日志擴容原因&#xff1a;當前的配置滿足不了max_connections為2000值&#xff0c;即當前的業務最大連接數超過2000個而按照8C64G的配置最多滿足…

【168頁PPT】華為流程管理體系構建與落地(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92796370/91662548 資料解讀&#xff1a;【168頁PPT】華為流程管理體系構建與落地 詳細資料請看本解讀文章的最后內容。華為&#xff0c;作為全球知名…

基于CotSegNet網絡和機器學習的棉花點云器官分割和表型信息提取

一、引言PointNet作為點云處理領域的先驅與里程碑式深度學習模型&#xff0c;以其卓越的性能和對無序點云數據直接處理的能力而聞名。博主將分享1篇發表在《Computers and Electronics in Agriculture》&#xff08;中科院1區TOP&#xff09;的“Organ segmentation and phenot…

經典卷積神經網絡CNN

一、CNN視覺處理三大任務&#xff1a;圖像分類、目標檢測、圖像分割上游&#xff1a;提取特征&#xff0c;CNN下游&#xff1a;分類、目標、分割等&#xff0c;具體的業務1. 概述卷積神經網絡是深度學習在計算機視覺領域的突破性成果。在計算機視覺領域, 往往我們輸入的圖像都很…