一、fs 模塊(文件系統)

fs 模塊是 Node.js 操作文件 / 目錄的核心模塊,提供同步異步兩種 API(推薦異步,避免阻塞事件循環)。

1. 核心功能分類
  • 文件操作:讀寫文件、追加內容、修改權限
  • 目錄操作:創建目錄、讀取目錄、刪除目錄
  • 路徑處理:配合path模塊拼接路徑(避免系統路徑分隔符差異)
2. 常用 API 示例

javascript

運行

const fs = require('fs');
const path = require('path');

// 1. 異步讀取文件(推薦)
fs.readFile(path.join(__dirname, 'test.txt'), 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

// 2. 異步寫入文件(覆蓋原有內容)
fs.writeFile('test.txt', 'Hello fs!', (err) => {
  if (err) throw err;
});

// 3. 創建目錄(遞歸創建多級目錄用mkdirSync(path, { recursive: true }))
fs.mkdir('newDir', (err) => {
  if (err) throw err;
});

// 4. 讀取目錄內容
fs.readdir(__dirname, (err, files) => {
  if (err) throw err;
  console.log(files); // 輸出目錄下所有文件/目錄名
});
3. 流(Stream)處理大文件

對於大文件,直接用readFile/writeFile會佔用大量內存,推薦用(流式讀寫,分塊處理):

javascript

運行

const readStream = fs.createReadStream('bigFile.txt');
const writeStream = fs.createWriteStream('copyFile.txt');
readStream.pipe(writeStream); // 管道傳輸,實現文件複製
總結
  • fs 模塊區分異步(無 Sync 後綴)和同步(Sync 後綴) API,異步通過回調 / Promise(fs.promises)處理結果。
  • 操作路徑時務必配合path模塊(path.join()/path.resolve()),避免跨平台兼容問題。
  • 大文件操作優先用,減少內存佔用。

二、http 模塊(創建 HTTP 服務)

http 模塊是 Node.js 構建 HTTP 服務器 / 客户端的基礎,無需第三方庫即可實現簡單的 Web 服務。

1. 創建 HTTP 服務器

javascript

運行

const http = require('http');

const server = http.createServer((req, res) => {
  // req:請求對象(包含請求頭、URL、方法等)
  // res:響應對象(用於返回數據給客户端)
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello HTTP Server!\n');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});
2. 核心能力
  • 解析請求:獲取請求方法(req.method)、URL(req.url)、請求頭(req.headers
  • 路由簡單實現:通過判斷req.url返回不同內容
  • 響應處理:設置狀態碼、響應頭,返回 JSON/HTML 等數據
3. 侷限性
  • 原生 http 模塊實現複雜路由、中間件等功能需要大量手動代碼,實際開發中常用 Express/Koa 框架封裝。
總結
  • http 模塊是 Node.js 實現 Web 服務的底層基礎,核心是createServer()創建服務器,通過回調處理請求 / 響應。
  • 需手動處理路由、請求解析等細節,適合理解原理,但開發效率低。

三、包管理(npm/yarn/pnpm)

Node.js 的包管理工具用於安裝、管理第三方依賴包,核心是package.json(項目配置文件)和node_modules(依賴存放目錄)。

1. 核心概念
  • package.json:記錄項目依賴、腳本、版本等信息(通過npm init生成)。
  • 依賴分類
  • dependencies:生產環境依賴(npm install <包名>
  • devDependencies:開發環境依賴(npm install <包名> -D
  • 版本規則:語義化版本(MAJOR.MINOR.PATCH,如 1.2.3),^(兼容更新)、~(補丁更新)等符號控制版本範圍。
2. 常用命令

bash

運行

npm init -y          # 快速生成package.json(跳過問答)
npm install express  # 安裝生產依賴
npm install nodemon -D # 安裝開發依賴
npm uninstall axios  # 卸載包
npm run <腳本名>     # 執行package.json中的scripts腳本
npm list             # 查看已安裝包的版本
3. 包管理工具對比
  • npm:Node 自帶,生態最完善,但安裝速度較慢。
  • yarn:Facebook 開發,速度快,鎖文件(yarn.lock)更穩定。
  • pnpm:性能最優,採用硬鏈接節省磁盤空間,適合大型項目。
總結
  • 包管理的核心是通過package.json管理依賴,避免 "依賴地獄"。
  • 開發環境依賴和生產環境依賴需區分安裝,減少部署體積。

四、Express 模塊(Web 框架)

Express 是 Node.js 最流行的輕量級 Web 框架,基於 http 模塊封裝,簡化路由、中間件、請求處理等操作。

1. 快速上手

bash

運行

npm install express

javascript

運行

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello Express!');
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});
2. 核心優勢
  • 簡化路由定義(app.get()/app.post()等)。
  • 中間件機制(處理請求、響應、錯誤等)。
  • 內置請求解析(JSON、URL 編碼)。
  • 支持模板引擎(EJS、Pug)。
總結
  • Express 是 http 模塊的 "增強版",無需手動解析請求、處理路由,開發效率大幅提升。
  • 核心是中間件路由,是 Node.js Web 開發的基礎框架。

五、Express 路由

路由是指客户端請求的 URL 與服務器處理函數的映射關係,Express 支持多種路由定義方式。

1. 基礎路由定義

javascript

運行

// 格式:app.請求方法(路徑, 處理函數)
app.get('/', (req, res) => res.send('首頁'));
app.post('/login', (req, res) => res.send('登錄接口'));
app.put('/user/:id', (req, res) => res.send(`修改用户${req.params.id}`));
app.delete('/user/:id', (req, res) => res.send(`刪除用户${req.params.id}`));
2. 路由參數與查詢參數
  • 路由參數/user/:id,通過req.params.id獲取。
  • 查詢參數/user?name=張三,通過req.query.name獲取。
3. 路由模塊化(路由拆分)

大型項目需按功能拆分路由(如用户路由、商品路由):

javascript

運行

// routes/user.js
const express = require('express');
const router = express.Router();

router.get('/info', (req, res) => res.send('用户信息'));
router.post('/register', (req, res) => res.send('用户註冊'));

module.exports = router;

// 主文件app.js
const userRouter = require('./routes/user');
app.use('/user', userRouter); // 掛載用户路由,訪問路徑:/user/info
總結
  • 路由核心是 "請求方法 + 路徑 + 處理函數" 的映射。
  • 模塊化路由可提高代碼可維護性,適合大型項目。

六、Express 中間件

中間件是 Express 的核心概念,本質是函數,用於處理請求(req)和響應(res),或傳遞控制權給下一個中間件。

1. 中間件分類
  • 應用級中間件:全局生效(app.use())或特定路徑生效。
  • 路由級中間件:綁定到路由實例(router.use())。
  • 錯誤處理中間件:4 個參數(err, req, res, next),捕獲全局錯誤。
  • 內置中間件:Express 自帶(如express.json()解析 JSON 請求體)。
  • 第三方中間件:如cors(跨域)、morgan(日誌)。
2. 常用示例

javascript

運行

// 1. 全局中間件(所有請求都會經過)
app.use((req, res, next) => {
  console.log(`請求時間:${new Date()}`);
  next(); // 傳遞給下一個中間件/路由
});

// 2. 內置中間件(解析JSON請求體)
app.use(express.json());

// 3. 錯誤處理中間件(需放在最後)
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('服務器內部錯誤!');
});

// 4. 第三方中間件(日誌)
const morgan = require('morgan');
app.use(morgan('dev'));
3. 中間件執行順序
  • 按代碼定義順序執行,需通過next()傳遞控制權。
  • 若中間件未調用next()且未返回響應,請求會被掛起。
總結
  • 中間件是 Express 處理請求的 "管道",可實現日誌、權限驗證、錯誤處理等通用功能。
  • 錯誤處理中間件必須有 4 個參數,且需放在所有路由 / 中間件之後。

整體總結

模塊 / 概念

核心作用

關鍵特點

fs

操作文件 / 目錄

異步 API 為主,大文件用流,配合 path 模塊處理路徑

http

原生創建 HTTP 服務

底層基礎,需手動處理路由 / 解析,適合理解原理

包管理

管理第三方依賴

通過 package.json 管理,區分生產 / 開發依賴,npm/yarn/pnpm 可選

Express

Web 開發框架

封裝 http 模塊,簡化路由 / 中間件,提高開發效率

路由

映射請求 URL 與處理函數

支持模塊化拆分,通過 req.params/req.query 獲取參數

中間件

處理請求 / 響應的中間函數

按順序執行,可實現通用功能(日誌、驗證),錯誤處理中間件需 4 個參數