首頁 > web前端 > js教程 > 在Node.js中創建HTTP服務器

在Node.js中創建HTTP服務器

Joseph Gordon-Levitt
發布: 2025-02-25 14:27:09
原創
160 人瀏覽過

構建一個Node.js HTTP服務器

Creating a HTTP Server in Node.js

上一篇文章介紹了最基本的Node.js程序。雖然“Hello World”程序很好,但Node.js更常用於創建高度可擴展的服務器應用程序。本文介紹一個基於Node.js構建的簡單HTTP服務器。

關鍵要點

  • Node.js允許創建簡單的HTTP服務器,關鍵步驟是創建新文件,插入適當的代碼並運行服務器。可以通過Web瀏覽器通過localhost或機器的IP地址訪問服務器。
  • 服務器的功能建立在require()方法(加載模塊)和http模塊的createServer()方法(創建服務器並為每個新請求執行回調函數)之上。回調函數使用兩個參數(請求和響應)來處理客戶端請求並返回數據。
  • 服務器使用response.writeHead()方法將HTTP狀態代碼和響應頭髮送回客戶端,使用response.write()寫入HTML頁面,並使用response.end()結束響應。服務器使用listen()方法偵聽傳入連接。目前,服務器只能返回單個HTML頁面,未來的增強功能可能包括從文件系統讀取網頁和整合HTTP身份驗證。

運行服務器

首先,創建一個名為“web_server.js”的新文件。將以下代碼插入文件並保存:

var http = require("http");
var server = http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/html"});
  response.write("<!DOCTYPE html>");
  response.write("<html>");
  response.write("<head>");
  response.write("<title>Hello World Page</title>");
  response.write("</head>");
  response.write("<body>");
  response.write("Hello World!");
  response.write("</body>");
  response.write("</html>");
  response.end();
});

server.listen(80);
console.log("Server is listening");
登入後複製

要啟動服務器,請鍵入以下命令。如果一切正常,您將看到一條消息,表明服務器正在監聽。請注意,示例服務器嘗試綁定到端口80(標準HTTP端口)。如果此端口已被使用或在您的機器上受到限制,您將遇到錯誤。

node web_server.js
登入後複製

下一步是使用Web瀏覽器連接到服務器。啟動您選擇的瀏覽器,並將其定向到以下任一鏈接。在網絡術語中,localhost(及其IP地址127.0.0.1)指的是您當前使用的機器。您的瀏覽器應該顯示“Hello World!”。

<code>http://localhost
http://127.0.0.1</code>
登入後複製

服務器的工作原理

現在服務器已啟動並運行,是時候分析代碼了。首先要注意的是第1行的require()調用。 Node.js提供了一個簡單的模塊系統,擁有龐大的開發者社區。 Node.js程序可以使用require()方法加載單個模塊。雖然許多模塊必須下載,但有些模塊(例如http)包含在Node.js安裝中。在第2行,使用http模塊的createServer()方法創建HTTP服務器。與大多數Node.js函數一樣,createServer()將回調函數作為參數。每次服務器接收到新請求時,都會執行此回調函數。回調函數接受兩個參數:請求和響應。請求對象包含有關客戶端請求的信息,例如URL、HTTP頭等等。類似地,響應對像用於將數據返回給客戶端。回調函數首先調用response.writeHead()方法。此方法將HTTP狀態代碼和一組響應頭髮送回客戶端。狀態代碼用於指示請求的結果。例如,每個人以前都遇到過404錯誤,表示找不到頁面。示例服務器返回代碼200,表示成功。除了狀態代碼外,服務器還會返回許多HTTP頭,這些頭定義了響應的參數。如果您未指定頭,Node.js將隱式地為您發送它們。示例服務器僅指定Content-Type頭。此特定頭定義了響應的MIME類型。對於HTML響應,MIME類型為“text/html”。接下來,服務器執行對response.write()的幾次調用。這些調用用於寫入HTML頁面。默認情況下,使用UTF-8字符編碼。從技術上講,所有這些調用都可以組合成單個調用以提高性能。但是,對於這樣一個簡單的示例,為了代碼的可讀性,犧牲了性能。寫入HTML頁面後,將調用response.end()方法。通過調用此方法,我們告訴服務器響應頭和正文已發送,並且請求已完成。示例服務器在沒有參數的情況下調用end()。但是,如果只需要一次調用,end()也可以像write()一樣調用。第15行的listen()調用使服務器綁定到端口並偵聽傳入連接。計算機有數千個端口,充當通信端點。為了連接到服務器,客戶端必須確切知道服務器正在偵聽哪個端口。端口由端口號標識,HTTP服務器通常偵聽端口80。

結論

本文介紹了一個非常基本的HTTP服務器。在其當前狀態下,服務器只能返回單個HTML頁面。在接下來的幾週內,我們將深入探討Node.js的世界,探索其他功能,例如從文件系統讀取網頁和整合HTTP身份驗證。

Node.js創建HTTP服務器的常見問題解答(FAQ)

Node.js中‘http.createServer()’方法的用途是什麼?

http.createServer()方法是Node.js中用於創建HTTP服務器新實例的內置函數。此服務器偵聽傳入請求並發送響應。它將一個requestListener函數作為參數,該函數會自動添加到“request”事件。每次服務器收到請求時,都會調用此函數。 requestListener函數有兩個參數:requesthttp.IncomingMessage的實例)和responsehttp.ServerResponse的實例)。

Node.js中‘response.writeHead()’方法是如何工作的?

response.writeHead()方法是Node.js中用於向請求發送響應頭的函數。該方法接受兩個參數:狀態代碼和表示響應頭的普通對象。狀態代碼是3位HTTP狀態代碼,第二個參數是一個對象,其中每個鍵值對錶示一個頭名稱及其值。此方法必須在response.end()之前調用,並且每個響應只能調用一次。

Node.js中‘write’和‘writeHead’的區別是什麼?

Node.js中的writewriteHead方法都用於發送服務器響應的過程。 writeHead方法用於發送HTTP狀態代碼和一組響應頭,而write方法用於向客戶端發送響應正文。 writeHead方法應該在write之前調用,兩者都應該在end之前調用,end向服務器發出信號,表明所有響應頭和正文都已發送。

如何在Node.js中使用‘node-http-server’包?

node-http-server是Node.js的一個簡單易配置的HTTP或HTTPS服務器。要使用它,您首先需要使用npm(Node包管理器)通過運行npm install node-http-server來安裝它。安裝後,您可以在Node.js文件中引入它,並使用其deploy方法啟動服務器。 deploy方法將配置對像作為參數,您可以在其中指定服務器選項,例如端口、根和serverIndex。

如何在Node.js中處理HTTP請求和響應?

在Node.js中,您可以使用http模塊處理HTTP請求和響應。首先,您需要使用http.createServer()方法創建一個HTTP服務器。此方法將回調函數作為參數,每次服務器收到請求時都會執行該函數。回調函數有兩個參數:requestresponserequest對象可用於獲取有關客戶端請求的信息,例如URL、HTTP頭和有效負載。 response對像用於向客戶端發送響應。您可以使用response.writeHead()方法設置HTTP狀態代碼和頭,使用response.write()方法編寫響應正文,並使用response.end()方法結束響應。

以上是在Node.js中創建HTTP服務器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板