本篇文章給大家瞭解一下Node.js http模組,介紹一下createServer和listen方法,希望對大家有所幫助!
使用 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,就能看到以下內容:
到這裡,只需件簡簡單單的 6 行程式碼,就建立了一個 web 服務。【相關教學推薦:、】
可以看到,建立 Web 服務的核心方法就是 createServer
方法。
它接收一個回撥函數,回撥引數接收兩個引數,分別是 :
這個回撥函數,就是處理 http 請求,設定 http 響應的主要場所。所以,編寫 web 服務,其實就是在不停的在這個函數中處理請求和響應內容。這也是基於 HTTP 協定本身的請求-響應模型所決定的。當然,實際開發中肯定不能這麼雜糅的寫,都是使用框架,那會有很合理的中介軟體機制和分層。
我們都知道,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)
})
登入後複製
試一下:
一種是指定要監聽的主機名。
當不指定 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 服務主要就是利用回撥函數的兩個引數 request
和 response
,後面會詳細介紹。
更多node相關知識,請存取:!
以上就是Node http模組學習:聊聊基本用法的詳細內容,更多請關注TW511.COM其它相關文章!