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% 的需求:讀寫檔、拼路徑、開伺服器、讀環境變數、除錯輸出。