如何用 Node.js 建立一個伺服器

TC
5 min readSep 24, 2022

--

一般網路應用程式的伺服器是建立在網路上的某一個地方。而用 Node.js 建立伺服器則是在本機電腦 (你自己的電腦),透過 Node.js 來執行 JavaScript,讓它也變成一個能跟瀏覽器互動的伺服器。

事前作業,可移至【Node.js 與 Express 基本介紹】此文觀看
https://link.medium.com/UsTQkilAAtb

需要先建立一個專案資料夾,最後使用終端機執行這個 JavaScript 檔案

Step.1 載入 Node.js HTTP 模組 -> 建立 HTTP 連線功能

> 使用 require 這個關鍵字載入
>【建議】透過 http 這個參數來表達,方便以後重複使用。而因為它的值不會改變,所以定義為常數 (使用const宣告)。

const http = require('http')

— — — — —

Step.2 定義和伺服器有關的變數

> 定義主機名稱 (hostname)
> 定義與這個主機連接的連接埠號 (port number)
*補充說明:跟「本機伺服器」互動的方式是在瀏覽器輸輸入「本機伺服器」的網址。一般的設定是 localhost:3000

const hostname = 'localhost'
const port = 3000

> 建立好相關變數後,就可以設定這個伺服器的 request 以及 response

const server = http.createServer((req, res) => {
// 這裡會放入 req 跟 res 的設定
})

createServer 這個方法中需要包含一個函式 (function),這個函式這兩個參數:
·「請求」 (request) -> req ,將帶有瀏覽器發送的請求內容
·「回應」 (response) -> res,則可以設定我們要給予瀏覽器的回應為何

要給予回應時,有幾個狀態需要先設定好,瀏覽器才能夠順利讀取,也就是Step3. 的 status code 以及 Step.4 的 Content-Type。

— — — — —

Step.3 設定回應的 HTTP 狀態碼 (status code)

status code 是要告訴瀏覽器,伺服器現在處理這個請求的情況為何,以下舉出幾個常見的狀態碼:

200 — 請求成功
404 — 表示找不到這個網址所對應的頁面
500 — 表示伺服器目前的狀態異常,無法給予回應

> 在回應的 res 物件中設定 statusCode

const server = http.createServer((req, res) => {
res.statusCode = 200
})

— — — — —

Step.4 設定回應的內容類型 (Content-Type)

除了 HTTP status code之外,在回應時還要告訴瀏覽器回應的 Content-Type 為何。* 一般來說內容類型大多是 HTML 文件 (text/html)

· HTML 文件 (text/html)
· 純文字 (text/plain)
· PDF 檔 (application/pdf)
· 影片檔 (video/mpeg4)
· 用來傳送資料的 JSON 檔 (application/json)

> 在回應的 res 物件中設定 Content-Type ,如下:

const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/html')
})

— — — — —

Step.5 把回應的訊息傳送給瀏覽器

Step1~4都完成後,就可以來撰寫伺服器 “實際” 的回應,也就是 “想呈現在瀏覽器上的內容” 了。
> 透過 res.end() 可以把想要給瀏覽器的回應寫在這裡。

const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end(`瀏覽器的回應會被放在這裡`)
})

— — — — —

Step.6 啟動並監聽伺服器

最後,我們需要啟動伺服器,而啟動伺服器的方法就是請它去「監聽」(listen) 傳來的請求。

在 Node.js 中, 我們可以使用 server.listen() 這個方法來啟動伺服器,其中三個參數分別為 porthostname匿名函示(anonymous function)

server.listen(port, hostname, () => {
console.log(`啟動伺服器會看到的資訊`)
})

— — — — —

End

const http = require('http')
const hostname = 'localhost'
const port = 3000
const server = http.createServer((req, res) => {
// 這裡會放入 req 跟 res 的設定
})
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end(`瀏覽器的回應會被放在這裡`)
})
server.listen(port, hostname, () => {
console.log(`啟動伺服器會看到的資訊`)
})

➡️ 在終端機中執行 nodemon [檔案名稱]

➡️ 在終端機畫面中會直接印出 Step.6 中指定的 console.log 的 “啟動伺服器會看到的資訊”

➡️ 接著在瀏覽器輸入 localhost:3000 即可看到在 Step.5 中透過 res.end() 所設定的回應 “瀏覽器的回應會被放在這裡”

--

--