這篇文章跟大家了解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 服務。 【相關教學推薦:nodejs影片教學、程式設計教學】
可以看到,創建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相關知識,請造訪:nodejs 教學!
以上是Node http模組學習:聊聊基本用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!