node.js啟動http服務

C羽言發表於2024-04-04

新建一個檔案 server.js,程式碼如下

// 匯入http模組
const http = require('http');
// 定義主機和埠號
const hostname = '127.0.0.1';
const port = 3000;
// 建立HTTP伺服器
const server = http.createServer((req, res) => {
    // 獲得HTTP請求的method和url:
    console.log(req.method + ': ' + req.url);
    // 將HTTP響應200寫入response, 同時設定Content-Type: text/html:
    res.writeHead(200, { 'Content-Type': 'text/html' });
    // 傳送響應
    res.end('<h1>Hello, Eric!</h1>');
});
// 啟動伺服器監聽指定的主機和埠
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

要執行這個伺服器,您只需將以上程式碼儲存到一個.js檔案中(例如server.js),然後在終端中執行node server.js命令。然後,您可以在瀏覽器中訪問http://127.0.0.1:3000/來檢視您的伺服器是否正常執行。

講解

可替代的程式碼

res.writeHead(200, { 'Content-Type': 'text/html' });

可以用

res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');

res.setHeaderres.writeHead 都是 Node.js HTTP 模組中用於設定 HTTP 響應頭的方法,但它們有一些不同之處:

  1. res.setHeader:

    • res.setHeader(name, value) 方法用於設定指定名稱的響應頭的值。如果已存在具有指定名稱的響應頭,則該值將被替換為新值。
    • 該方法可以多次呼叫來設定不同的響應頭。
    • 例如:
      res.setHeader('Content-Type', 'text/html');
      res.setHeader('Cache-Control', 'max-age=3600');
  2. res.writeHead:

    • res.writeHead(statusCode, [reasonPhrase], [headers]) 方法用於寫入響應頭和狀態碼到響應流中,並且可以在寫入響應體之前呼叫。
    • 該方法允許您一次性設定狀態碼、原因短語和響應頭,如果指定了響應頭,它將覆蓋之前透過 res.setHeader 設定的同名響應頭。
    • 例如:
      res.writeHead(200, 'OK', {'Content-Type': 'text/html', 'Cache-Control': 'max-age=3600'});

通常情況下,如果您只需要設定少量的響應頭,可以使用 res.setHeader。但是,如果您需要在一次操作中設定多個響應頭以及狀態碼和原因短語,那麼可以使用 res.writeHead

在 Node.js 的 res.writeHead 方法中,引數2 reasonPhrase 是可選的,因此您可以選擇省略它。如果省略了 reasonPhrase,則將使用預設的原因短語,與指定的狀態碼相對應。

例如,如果您只想設定狀態碼為 200,並使用預設的原因短語 "OK",您可以這樣呼叫 writeHead 方法:

res.writeHead(200, {'Content-Type': 'text/html', 'Cache-Control': 'max-age=3600'});

在這個例子中,我們省略了第二個引數 reasonPhrase,並且狀態碼為 200 對應的預設原因短語將被使用。

在 Node.js 的 server.listen 方法中,hostname 引數是可選的,如果省略,則伺服器將會監聽所有可用的網路介面。

如果您省略了 hostname 引數,程式碼會像這樣:

server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

在這個例子中,伺服器將監聽所有可用的網路介面,而不限制於特定的主機名。這對於大多數情況下都是合適的,特別是在您只需要在本地開發環境中執行伺服器時。

當伺服器監聽所有可用的網路介面時,它將會在所有可用的網路地址上接受連線請求,而不僅限於特定的主機名。這意味著可以透過計算機上的任何網路介面訪問伺服器,無論是透過本地迴環地址(localhost)、本地區域網 IP 地址還是公共 IP 地址。

後臺執行Node.js伺服器並隱藏終端

要在後臺執行Node.js伺服器並隱藏終端,您可以使用以下方法之一:

  1. 使用nohup命令(適用於Unix系統):

    nohup node server.js > /dev/null 2>&1 &

    這將在後臺啟動Node.js伺服器,並將輸出重定向到/dev/null,即丟棄所有輸出。伺服器將在後臺執行,而不會在終端上顯示任何輸出。

  2. 使用PM2程序管理器: 首先,您需要全域性安裝PM2:

    npm install -g pm2

    然後,在您的專案目錄下啟動伺服器:

    pm2 start server.js

    這將使用PM2在後臺啟動Node.js伺服器,並管理其執行狀態。您可以使用pm2 logs命令檢視日誌,使用pm2 stop命令停止伺服器。

這兩種方法都允許您在後臺執行Node.js伺服器,而不會在終端上顯示輸出。

相關文章