跳轉到

2.2 必備內建模組#

Node 自帶的模組,不用 npm 安裝。日常開發最常用的五個:

fs:讀寫檔案#

const fs = require("node:fs/promises");   // 現代建議:Promise 版

async function main() {
  // 讀檔
  const data = await fs.readFile("data.txt", "utf8");

  // 寫檔(覆蓋)
  await fs.writeFile("output.txt", "Hello!");

  // 附加內容
  await fs.appendFile("log.txt", "新的一筆\n");

  // 檢查檔案存在
  try {
    await fs.access("data.txt");
  } catch {
    console.log("檔案不存在");
  }
}

注意:fs/promises 提供非同步版本,盡量不用同步版(fs.readFileSync),否則會擋住整個事件迴圈。

path:處理路徑#

跨平台的路徑處理(Windows 用 \,macOS/Linux 用 /):

const path = require("node:path");

path.join("src", "models", "user.js");  // "src/models/user.js"(自動處理斜線)
path.extname("photo.png");              // ".png"
path.basename("/a/b/c.js");             // "c.js"
__dirname;                              // 目前檔案所在目錄(CommonJS)

鐵律:拼路徑一律用 path.join(),不要手動用字串串接 +。

http:建立伺服器#

不裝任何套件就能開一個 HTTP 伺服器:

const http = require("node:http");

http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "application/json" });
  res.end(JSON.stringify({ message: "Hello" }));
}).listen(3000, () => console.log("http://localhost:3000"));

實務上大家都用 Express 簡化(見 4.1 節),但要看懂底層就是這樣。

process:取得程式與環境資訊#

process.env.PORT;        // 讀環境變數
process.argv;            // 命令列參陣列
process.cwd();           // 目前工作目錄
process.exit(1);         // 結束程序(非 0 表示異常)

console 與 JSON#

天天在用,但兩個細節值得知道:

console.table(rows);        // 表格化輸出,看資料超好用
console.error(err);         // 錯誤輸出到 stderr

JSON.stringify(obj, null, 2);   // 縮排 2 格,輸出漂亮 JSON
JSON.parse(str);                // 解析 JSON 字串(失敗會 throw)

這五個模組就覆蓋了日常 80% 的需求:讀寫檔、拼路徑、開伺服器、讀環境變數、除錯輸出。