一、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 個參數
|