Node http模組學習:聊聊基本用法

2023-02-04 14:00:17

本篇文章給大家瞭解一下Node.js http模組,介紹一下createServer和listen方法,希望對大家有所幫助!

http 模組

使用 Node.js 中建立 Web 服務,主要依賴內建的 http 模組。經典的 express.js、koa.js 框架都是以 http 模組為核心,進行的不同程度的封裝。

建立一個最簡單的 Web 服務只需要幾行程式碼。新建一個 index.js 檔案,輸入以下內容:

// 1.匯入 http 模組
const http = require('http');

// 2. 呼叫 createServer 方法建立服務
const server = http.createServer((request, response) => {
    // 3.響應給瀏覽器的內容
	response.end('Hello, World'); 
});

// 4.執行 listen 方法,啟動服務
server.listen(3000, () => {
    console.log('伺服器啟動成功:http://localhost:3000')
})
登入後複製

然後開啟命令列工具,使用 node 命令執行該檔案:

node index.js
登入後複製

命令列工具中會列印:

伺服器啟動成功:http://localhost:3000
登入後複製

之後開啟瀏覽器,存取 http://localhost:3000,就能看到以下內容:

1.png

到這裡,只需件簡簡單單的 6 行程式碼,就建立了一個 web 服務。【相關教學推薦:、】

createServer 方法

可以看到,建立 Web 服務的核心方法就是 createServer 方法。

它接收一個回撥函數,回撥引數接收兩個引數,分別是 :

  • request 物件:表示 HTTP 請求物件,裡面包含了使用者端本次請求攜帶的資訊
  • response 物件:表示 HTTP 響應物件,用於向用戶端設定響應的資訊

這個回撥函數,就是處理 http 請求,設定 http 響應的主要場所。所以,編寫 web 服務,其實就是在不停的在這個函數中處理請求和響應內容。這也是基於 HTTP 協定本身的請求-響應模型所決定的。當然,實際開發中肯定不能這麼雜糅的寫,都是使用框架,那會有很合理的中介軟體機制和分層。

listen 方法

我們都知道,TCP 協定是 HTTP 協定的底層協定,所有 HTTP 請求的資料都是利用 TCP 傳輸的。要傳送 HTTP 請求,必須先建立 TCP 連線

Node 中要建立 HTTP 服務也是如此。createServer 方法執行後會建立一個 Server 類的範例,該 Server 類又繼承自另一個內建模組 net 中的 Server 類,它身上有一個 listen 方法。下面是相關的型別宣告,可以理解這其中的關係。

// net 模組

class Server extends EventEmitter {
 
        /**
         * 啟動伺服器監聽連線。此 Server 可以是 TCP 或 IPC 伺服器,具體取決於它所監聽的內容。
         */
        // 有若干過載,這是最常使用的一種方法
        listen(port?: number, hostname?: string, listeningListener?: () => void): this;
        listen(port?: number, listeningListener?: () => void): this;
}


// http 模組
import { Server as NetServer } from 'node:net';

function createServer<
        Request extends typeof IncomingMessage = typeof IncomingMessage,
        Response extends typeof ServerResponse = typeof ServerResponse,
    >(requestListener?: RequestListener<Request, Response>): Server<Request, Response>;
      
class Server<
        Request extends typeof IncomingMessage = typeof IncomingMessage,
        Response extends typeof ServerResponse = typeof ServerResponse,
    > extends NetServer {}
登入後複製

所以通過 createServer 方法建立了服務之後,還用再呼叫 listen 方法,用於啟動該服務,監聽連線

它有多種過載,最常用的一種就是監聽一個埠,在啟動成功後,執行回撥函數:

server.listen(3000, () => {
    console.log('伺服器啟動成功:http://localhost:3000')
})
登入後複製

如果服務啟動失敗,比如出現埠佔用時,控制檯中會直接報錯,就不再執行後面的回撥函數了。

再介紹兩種其他的過載,使用的並不多。

一種是不指定埠號,此時作業系統會隨機分配一個可用的埠號。在服務啟動成功後,可以通過 server.address().port 屬性來獲得分配的埠號:

server.listen(() => {
    const port = server.address().port
    console.log(port)
    console.log('伺服器啟動成功:http://localhost:', port)
})
登入後複製

試一下:

2.png

一種是指定要監聽的主機名

當不指定 host 時,預設為 0.0.0.0(IPv4)或者 ::(IPv6),支援網路中所有的主機進行存取

如果設定為 locolhost 或者 127.0.0.1,則只能自己的主機存取。

server.listen(3000, 'localhost', () => {
    console.log('伺服器啟動成功:http://localhost:', port)
})
登入後複製

總結

我們介紹了 http 模組的基本用法,主要使用 createServer 來建立服務,再呼叫 listen 方法來啟動服務,監聽連線。createServer 接收回撥函數用來具體處理某一個請求,編寫 web 服務主要就是利用回撥函數的兩個引數 requestresponse ,後面會詳細介紹。

更多node相關知識,請存取:!

以上就是Node http模組學習:聊聊基本用法的詳細內容,更多請關注TW511.COM其它相關文章!