NODE / BACKEND CORE · 101
Node.js Runtime / Process:JavaScript 離開 Browser 後在哪裡跑?
Node.js 不是「後端語言」,也不是 npm。它是能在 Browser 外執行 JavaScript 的 runtime,提供 process、filesystem、network 等 host APIs。真正跑起來時,OS 看到的是一個 process。
Why now
React 已經在 Browser 端產生 request。接下來必須有另一個 runtime 接住 request、執行 server logic、存取 database。
server.jsnode server.jsNode runtimeOS startsprocesslistenport 3000
Learning outcomes
- 能區分 Browser runtime 與 Node runtime。
- 能區分 Node、npm、Express。
- 能說明 process 的 pid/cwd/env/exit code。
- 能解釋 server process 為何會長時間存活。
1. 同樣是 JavaScript,不同 host environment
| Browser | Node.js |
|---|---|
document、DOM | process、fs |
| 頁面 event | server/process I/O |
| localStorage | filesystem / env |
| Browser security model | OS process permissions |
console.log(document);
// Browser 有,Node 預設沒有
console.log(process.pid);
// Node 有2. Node ≠ npm ≠ Express
Node.js
JavaScript runtime。
npm
package manager + script runner。
Express
跑在 Node process 裡的 Web framework/library。
3. Process 是執行中的程式
console.log(
process.pid
);
console.log(
process.cwd()
);
console.log(
process.env.NODE_ENV
);同一份 source code 可以被啟動多次,每次得到不同 process / pid / memory state。
4. Process 什麼時候結束?
console.log("done");
// 沒有其他待處理工作時 process 結束
server.listen(3000);
// listener 還存在,event loop 有活躍工作
// process 持續存活5. Environment config 是 process input
const port =
Number(
process.env.PORT
?? 3000
);environment variable 不是寫進 source 的 magic global;它由啟動 process 的環境提供。local / CI / production 可能不同。
Project checkpoint:Course API v1
// server.js
const port =
Number(
process.env.PORT
?? 3000
);
console.log(
"Starting Course API",
{
pid: process.pid,
cwd: process.cwd(),
port
}
);現在還沒有 HTTP listener。這一課先建立 runtime/process/config mental model。
Debug evidence
| 症狀 | 第一個 evidence |
|---|---|
node command 不存在 | runtime / PATH installation |
| 讀不到 env | process environment |
| process 啟動後立刻結束 | 是否仍有 listener/timer/I/O work |
| process exit code 非 0 | stderr / stack trace / shell exit status |
Knowledge check
- Node、npm、Express 各是哪一層?
- 同一份 server.js 啟動兩次,哪些 state 會獨立?
- process.cwd() 和 source file location 為什麼可能不同?
- 解釋 server 為什麼不會執行完 main file 就立刻退出。