Node.js 基礎
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行時,用於在服務端執行 JavaScript 程式碼。以下是 Node.js 的基本概念和常用功能。
Node.js 簡介
特點
- 單執行緒、非阻塞 I/O:透過事件迴圈和非同步 I/O,提高高併發能力。
- 基於模組化:使用 CommonJS 模組規範,程式碼組織更清晰。
- 跨平臺:支援多種作業系統(Windows、Linux、macOS)。
應用場景
- 構建 Web 服務(如 REST API)。
- 建立實時應用程式(如聊天、遊戲)。
- 指令碼工具(如自動化任務)。
- 操作檔案系統。
基本模組
Node.js 提供了許多內建模組,以下是常用模組:
-
fs
(檔案系統模組)- 處理檔案和目錄。
const fs = require("fs"); // 同步讀取檔案 const data = fs.readFileSync("example.txt", "utf-8"); console.log("File content:", data); // 非同步讀取檔案 fs.readFile("example.txt", "utf-8", (err, data) => { if (err) throw err; console.log("Async file content:", data); });
-
http
(HTTP 服務模組)- 建立 HTTP 伺服器。
const http = require("http"); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello, World!"); }); server.listen(3000, () => { console.log("Server running at http://localhost:3000/"); });
-
path
(路徑操作模組)- 處理檔案路徑。
const path = require("path"); const filePath = path.join(__dirname, "example.txt"); console.log("File path:", filePath);
-
os
(作業系統資訊模組)- 獲取作業系統相關資訊。
const os = require("os"); console.log("Platform:", os.platform()); console.log("Total Memory:", os.totalmem());
npm 和包管理
npm 的作用
- npm(Node Package Manager)是 Node.js 的包管理工具,用於安裝和管理第三方庫。
常用命令
-
初始化專案
npm init -y
- 生成
package.json
檔案。
- 生成
-
安裝包
npm install express
- 預設安裝到
node_modules
目錄,並記錄到package.json
。
- 預設安裝到
-
安裝全域性包
npm install -g nodemon
- 全域性安裝的包可直接作為命令使用。
-
移除包
npm uninstall express
使用第三方模組
Express 示例
Express 是一個常用的 Node.js Web 框架,適合快速構建 Web 服務。
-
安裝 Express
npm install express
-
建立簡單伺服器
const express = require("express"); const app = express(); app.get("/", (req, res) => { res.send("Hello, Express!"); }); app.listen(3000, () => { console.log("Express server running at http://localhost:3000/"); });
非同步程式設計模式
Node.js 的核心是非同步程式設計,以下是幾種常用方式:
-
回撥
const fs = require("fs"); fs.readFile("example.txt", "utf-8", (err, data) => { if (err) throw err; console.log("File content:", data); });
-
Promise
const fs = require("fs").promises; fs.readFile("example.txt", "utf-8") .then((data) => console.log("File content:", data)) .catch((err) => console.error(err));
-
async/await
const fs = require("fs").promises; async function readFileContent() { try { const data = await fs.readFile("example.txt", "utf-8"); console.log("File content:", data); } catch (err) { console.error(err); } } readFileContent();