首頁  >  文章  >  web前端  >  Node http模組學習:聊聊基本用法

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

青灯夜游
青灯夜游轉載
2023-02-03 18:32:482249瀏覽

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

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

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,就能看到以下內容:

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

到這裡,只需件簡簡單單的6 行程式碼,就創建了一個web 服務。 【相關教學推薦:nodejs影片教學程式設計教學

#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(&#39;服务器启动成功:http://localhost:3000&#39;)
})

如果服務啟動失敗,例如出現端口佔用時,控制台中會直接報錯,就不再執行後面的回呼函數了。

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

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

server.listen(() => {
    const port = server.address().port
    console.log(port)
    console.log(&#39;服务器启动成功:http://localhost:&#39;, port)
})

試試看:

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

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

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

如果設定為 locolhost127.0.0.1,則只能自己的主機存取。

server.listen(3000, &#39;localhost&#39;, () => {
    console.log(&#39;服务器启动成功:http://localhost:&#39;, port)
})

總結

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

更多node相關知識,請造訪:nodejs 教學

以上是Node http模組學習:聊聊基本用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除