← Node / Backend Course

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

1. 同樣是 JavaScript,不同 host environment

BrowserNode.js
document、DOMprocess、fs
頁面 eventserver/process I/O
localStoragefilesystem / env
Browser security modelOS 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
讀不到 envprocess environment
process 啟動後立刻結束是否仍有 listener/timer/I/O work
process exit code 非 0stderr / stack trace / shell exit status

Knowledge check

  1. Node、npm、Express 各是哪一層?
  2. 同一份 server.js 啟動兩次,哪些 state 會獨立?
  3. process.cwd() 和 source file location 為什麼可能不同?
  4. 解釋 server 為什麼不會執行完 main file 就立刻退出。