
後端開發可以使用很多不同的程式語言,例如 JavaScript、Python、Java、C#、Go 等。
在此系列裡,筆者選擇的是 JavaScript,原因很單純,因為本來就是從前端開始學程式,已經接觸過 JavaScript,如果可以使用熟悉的語言開始學後端,就不需要同時面對「新語言」和「新領域」兩件事,可以先把注意力放在 API、資料庫、驗證等後端觀念上。
但這時也出現了一個疑問:原本在瀏覽器裡執行的 JavaScript,為什麼突然可以拿來寫後端了?
剛開始學 JavaScript 時,我們通常都是在瀏覽器裡使用它。例如:
const button = document.querySelector(".button");
button.addEventListener("click", () => {
console.log("Hello!");
});
JavaScript 可以控制網頁元素、監聽使用者操作,讓原本靜態的網頁產生互動。而瀏覽器之所以看得懂 JavaScript,是因為瀏覽器裡有負責執行 JavaScript 的「JavaScript 引擎」。
以 Chrome 為例,使用的就是 V8 引擎,V8 會負責解析與執行 JavaScript 程式碼。
而 Node.js 同樣使用 V8,除此之外還提供了許多瀏覽器沒有的功能,例如:
因此,JavaScript 不再只能控制網頁,可以直接在電腦或伺服器環境中執行。
Node.js 官方的介紹寫到:
“Node.js is an open-source and cross-platform JavaScript runtime environment.”
這裡出現了一個蠻陌生的名詞:Runtime(執行環境),可以先簡單理解成「讓程式碼實際跑起來的環境」。
JavaScript 在不同的 Runtime 中,可以使用的功能也會有所不同。
在前端,JavaScript 通常是在瀏覽器裡執行。我們可以使用瀏覽器提供的功能,例如:
document.querySelector();
localStorage.getItem();
fetch();
其中 document 可以操作網頁內容,localStorage 可以在瀏覽器儲存資料,這些都是瀏覽器環境提供給 JavaScript 使用的功能。
而到了 Node.js,我們則是把 JavaScript 換到另一個環境執行。
所以像 document、window 這些由瀏覽器提供的功能,在 Node.js 裡並不存在。相反地,Node.js 提供了讀寫檔案、處理網路連線等適合電腦與伺服器使用的功能。
例如,我們可以透過 Node.js 讀取電腦裡的檔案:
const fs = require("fs");
const data = fs.readFileSync("hello.txt", "utf8");
console.log(data);
瀏覽器和 Node.js 都能執行 JavaScript,只是所在的執行環境(Runtime)不同,環境提供的功能也有所不同。
既然 Node.js 可以讓 JavaScript 在瀏覽器之外執行,它能做的事情也不再侷限於網頁互動。常見的用途包括:
那麼,它和其他後端技術有什麼不同?
其實大部分常見的後端功能,不管使用 Node.js、Python、Java、C# 或 Go 都能做到,差別主要在於開發方式、生態系,以及各自擅長的應用情境。
例如 Python 也廣泛應用於資料分析與 AI;Java、C# 常見於大型企業系統;Go 則常被用於雲端服務與基礎設施。
Node.js 的其中一個特色,是很適合處理大量需要「等待」的工作。例如向資料庫查詢資料時,不需要一直停在原地等結果,可以先處理其他事情,等資料回來後再繼續。
因此,Node.js 很常被拿來開發 API、聊天室、即時服務等需要頻繁處理網路請求的應用。
在開始執行 Node.js 程式之前,需要先把 Node.js 安裝到電腦裡。可以到 Node.js 官方網站下載安裝程式。通常會看到以下幾種版本:
如果是第一次安裝,建議選擇 LTS 版本。安裝完成後,打開終端機輸入:
node-v
如果有成功安裝,就會看到目前的 Node.js 版本,例如:
v24.7.0
接著再確認 npm 是否也有安裝成功:
npm -v
如果同樣有顯示版本號,就代表環境已經準備好了。
npm 通常會隨著 Node.js 一起安裝,所以一般不需要另外下載,完成這一步之後,就可以開始建立第一個 Node.js 專案。
在嘗試第一個 Node.js 專案之前,需要先了解 npm 工具。
npm 是 Node.js 生態系常用的套件管理工具,開發時會經常需要搭配套件,例如 Express、nodemon 或其他第三方套件,都可以透過 npm 安裝與管理。
首先建立一個資料夾:
mkdir node-day02
cd node-day02
接著輸入:
npm init
終端機會詢問專案名稱、版本等資訊,完成之後,就會產生一個 package.json 檔案。
它就像是這個 Node.js 專案的基本資料表,會記錄專案名稱、版本、使用的套件以及可以執行的指令等資訊。
如果不想逐一回答問題,也可以直接使用:
npm init -y
讓 npm 使用預設值建立 package.json。
既然要開始寫程式,不免俗還是要來一個最經典的 Hello World。
在專案資料夾中,建立 app.js 檔案
檔案裡寫入 console.log("Hello World!");
接著在終端機執行:
node app.js
就會在終端機看到以下訊息:
Hello World!
到這裡,我們其實已經完成了一件以前寫前端時不太一樣的事情,這次沒有 HTML,也沒有打開瀏覽器,而是直接讓電腦執行 JavaScript。
開發過程中,如果每次修改 app.js 都要在終端機重新執行:
node app.js
其實有點麻煩,這時可以使用 nodemon 套件。因為 nodemon 通常只會在開發階段使用,所以可以把它安裝成開發依賴,在終端機輸入:
npm install --save-dev nodemon
也可以縮寫成:
npm install -D nodemon
安裝完成後,可以在 package.json 加入指令:
{
"scripts": {
"dev": "nodemon app.js"
}
}
之後只需要執行 npm run dev,nodemon 就會監聽檔案變化,當我們修改並儲存 app.js 時,它會自動重新啟動 Node.js 程式,不需要每次手動輸入 node app.js。
今天先初步認識 Node.js,提供了另一個 JavaScript Runtime,讓 JavaScript 可以離開瀏覽器,在電腦與伺服器環境中執行,並實際建立一個小專案。
但如果要讓其他人透過網路向我們的程式取得資料,還少了一個重要的東西:Server。
下一篇就來看看,伺服器到底是什麼,以及 Node.js 要怎麼建立一個最簡單的 HTTP Server。