Node.js 學習筆記(三):快速搭建一台網站伺服器

2023/11/21閱讀時間約 6 分鐘
raw-image

上一篇學習筆記我們討論到如何用 Node.js 操作電腦檔案系統,然而 Node.js 最常用的功能,應該非架設網站伺服器莫屬,畢竟要有伺服器,我們打造的應用程式才有地方跑不是嗎?這篇學習筆記就來看看如何用 Node.js 快速搭建一台網站伺服器。


完整程式碼

這裡我們直接附上完整的程式碼,參考 Node.js 官方網站的 Usage and examples

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!\n');
});

server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});


接下來將逐行說明程式碼,以及過程中牽扯到 HTTP 的知識。


導入 http 模組

誠如上一篇文章 Node.js 學習筆記(二) 的踩雷經驗,Node.js 就算是使用內建的模組,也需要在 script 上面先 import。而 http 模組包含了許多實用的 method,有助於我們搭建網站伺服器。

const http = require('http')



指定 hostname 與 port 號

接著我們要定義主機名稱。由於這次實作是在我們自己的電腦上建立伺服器,所以主機名稱直接使用 127.0.0.1 這組保留給「本計算機」的 IP 地址。至於 port 號則是我們要與該主機連線的連接埠號。

由於一台主機可以同時提供多種服務,所以會用 port 號進行分類。要使用 A 服務的話,就要與 xxx port 連線;要使用 B 服務的話,請改與 ※※※ port 連線。這層關係可以聯想成港口與

看到這裡,我心中冒出了一個疑問:為什麼要用 port 3000?原因似乎是 port 3000 並沒有被其他公眾的應用程式佔走,而且其他像 Express 和 Nodemon 這些熱門的框架與 package 也都把 3000 當作它們預設的 port 號,久而久之就成了某種慣例。

不過 port 3000 終究還是常用於開發環境,等到應用程式正式推上 production 環境,HTTP 的 port 號要變成 80;HTTPS 則要變成 443,這些 port 號需要系統管理員或是雲端服務管理員的身分才能使用。

const hostname = '127.0.0.1';
const port = 3000;


建立 HTTP 伺服器

接下來我們要運用 http 模組的 http.createServer()。這個 method 帶入一個 callback 匿名函式,每當有 request 被接收時就會觸發。匿名函式有 reqres 兩個參數,分別代表 HTTP 協議中的 request 還有 respond。reqres 都是巨大的物件,稍後我們會利用裡面的 property 來處理 incoming request。

const server = http.createServer((req, res) => {
// ... server logic ...
});


處理 incoming request

抱歉,上面我說了個小謊。由於這次筆記的範例只是快速建立簡單的網站伺服器,所以接下來我們只會用到 res 物件而已。在 HTTP 協議中,伺服器方理當回傳 status code 以及內容類型 (content-type),所以這邊我們將以上條件加入進去。

res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, World!\n');


上方透過 res.writeHead() 一次帶入 status code 200 以及 content-type 純文字文件,最後 res.end() 帶入伺服器回傳給 client 端的內容,同時告訴伺服器說,嘿,response header 和 body 都已經寄出去囉。至於 \n 就是單純空行。

當然,要把 status code 和 content type 分開來寫也是沒問題的:

  res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!\n');


啟動並監聽伺服器

server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});

listen() 會啟動伺服器,並指定要監聽的主機名稱以及 port 號。後面我們還加了個匿名函示,只要伺服器成功啟動,就列印出提示句子。

最後在 terminal 輸入 node <script name> 來啟動伺服器吧。


結語

這次參考 Node.js 官方文件的網站主機建立方式以快速、簡單為訴求。然而真實開發中,應用程式的架構當然沒有這麼單純,畢竟光是一個網站,可能就有為數眾多的網頁,我們勢必得想個有效率的方式來處理 incoming requests。因此像是 Express 等 web framework 就是不可或缺的開發神器,有助於簡化 routing 以及 request handling。

然而在導入和使用 Express 之前,我們必須先搞清出該如何安裝它,這就不得不提到 NPM 宇宙了.......(可能是下篇學習筆記的主題)。





16會員
34內容數
Bonjour à tous,我本身是法文系畢業,這邊會刊登純文組學習網頁開發的筆記。如果能鼓勵更多文組夥伴一起學習,那就太開心了~
留言0
查看全部
發表第一個留言支持創作者!