一、爲什麼選擇Node.js構建API?¶
Node.js是基於Chrome V8引擎的JavaScript運行環境,它的非阻塞I/O和單線程模型使其特別適合構建高併發的網絡服務。對於RESTful API(一種遵循REST風格的API設計規範),Node.js配合輕量級框架如Express,可以快速實現簡單高效的後端服務,非常適合初學者入門。
二、準備工作:安裝Node.js和Express¶
首先確保你的電腦已安裝Node.js(推薦LTS版本),可以通過nodejs官網下載安裝。安裝完成後,打開終端執行以下命令驗證:
node -v # 顯示Node.js版本號
npm -v # 顯示npm版本號
接下來,創建一個項目文件夾並初始化:
mkdir node-api-demo
cd node-api-demo
npm init -y # 快速生成package.json文件
安裝Express框架(我們將用它處理路由和響應):
npm install express
三、Express基礎:創建第一個路由¶
Express是一個簡潔的Web框架,核心功能是處理HTTP請求和返回響應。創建一個app.js文件,編寫以下代碼:
// 引入Express模塊
const express = require('express');
// 創建Express應用實例
const app = express();
// 定義端口號(可自定義,如3000)
const PORT = 3000;
// 使用中間件:解析JSON格式的請求體(必須在路由定義前調用)
app.use(express.json());
// 定義路由:處理GET請求(獲取資源)
app.get('/', (req, res) => {
// req: 請求對象,包含請求信息(如參數、頭信息等)
// res: 響應對象,用於返回數據給客戶端
res.status(200).json({
message: '歡迎使用Node.js RESTful API',
version: '1.0.0'
});
});
// 啓動服務器
app.listen(PORT, () => {
console.log(`服務器運行在 http://localhost:${PORT}`);
});
代碼解釋:
- app.get():處理GET請求,第一個參數是請求路徑('/'表示根路徑),第二個參數是回調函數,接收req(請求)和res(響應)對象。
- res.status(200):設置HTTP狀態碼爲200(表示請求成功),res.json():返回JSON格式數據(比res.send()更規範,適合API)。
- express.json():中間件,用於解析客戶端發送的JSON格式請求體(如POST/PUT請求)。
四、處理不同HTTP方法¶
RESTful API通過不同HTTP方法表達不同操作,常見的有GET(獲取)、POST(創建)、PUT(更新)、DELETE(刪除)。我們繼續在app.js中添加示例路由:
1. GET請求:獲取資源¶
// 模擬用戶數據(實際項目中可連接數據庫)
const users = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 }
];
// 獲取所有用戶
app.get('/users', (req, res) => {
res.status(200).json({
success: true,
data: users
});
});
// 獲取單個用戶(通過路由參數)
app.get('/users/:id', (req, res) => {
const userId = parseInt(req.params.id); // 將參數轉爲數字
const user = users.find(u => u.id === userId);
if (user) {
res.status(200).json({ success: true, data: user });
} else {
res.status(404).json({ success: false, message: '用戶不存在' });
}
});
路由參數:/users/:id中的:id是動態參數,通過req.params.id獲取,可用於獲取單個資源(如用戶ID)。
2. POST請求:創建資源¶
// 創建新用戶(需解析請求體,已通過express.json()中間件實現)
app.post('/users', (req, res) => {
const newUser = {
id: users.length + 1, // 簡單生成ID
name: req.body.name, // 從請求體獲取name參數
age: req.body.age
};
// 驗證請求體是否包含必要參數
if (!newUser.name || !newUser.age) {
return res.status(400).json({
success: false,
message: 'name和age爲必填參數'
});
}
users.push(newUser);
res.status(201).json({ // 201表示“創建成功”
success: true,
data: newUser
});
});
注意:POST請求需客戶端發送JSON數據(如{ "name": "Charlie", "age": 28 }),並通過req.body獲取數據。
3. PUT請求:更新資源¶
// 更新用戶信息
app.put('/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const index = users.findIndex(u => u.id === userId);
if (index === -1) {
return res.status(404).json({ success: false, message: '用戶不存在' });
}
// 更新用戶信息(合併請求體參數到原用戶數據)
users[index] = { ...users[index], ...req.body };
res.status(200).json({ success: true, data: users[index] });
});
4. DELETE請求:刪除資源¶
// 刪除用戶
app.delete('/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const initialLength = users.length;
// 過濾掉指定ID的用戶
const newUsers = users.filter(u => u.id !== userId);
if (newUsers.length === initialLength) {
return res.status(404).json({ success: false, message: '用戶不存在' });
}
// 更新用戶列表
users.length = 0;
users.push(...newUsers);
res.status(200).json({ success: true, message: '用戶已刪除' });
});
五、處理404和通用響應¶
當客戶端請求不存在的路徑時,Express默認不會返回404,需要手動處理:
// 404處理:所有未匹配路由都會進入此處
app.use((req, res) => {
res.status(404).json({ success: false, message: `路徑 ${req.originalUrl} 不存在` });
});
六、路由模塊化(進階)¶
當項目規模增大時,路由會越來越多,建議按功能拆分到不同文件(如routes/users.js),主文件引入:
1. 創建路由文件 routes/users.js:
const express = require('express');
const router = express.Router(); // 創建路由實例
// 這裏寫/users相關路由(與前面app.js中的/users路由一致)
router.get('/', (req, res) => { /* ... */ });
router.post('/', (req, res) => { /* ... */ });
module.exports = router;
2. 在主文件 app.js 中引入:
const userRoutes = require('./routes/users');
app.use('/users', userRoutes); // 將/users路徑與路由文件關聯
七、測試你的API¶
啓動服務器:
node app.js
使用工具測試API(推薦Postman或curl):
- GET /:訪問 http://localhost:3000,查看歡迎信息。
- GET /users:獲取用戶列表。
- POST /users:發送JSON請求體({ "name": "Charlie", "age": 28 }),創建新用戶。
- GET /users/1:獲取ID爲1的用戶信息。
總結¶
通過本文,你已經掌握了Node.js構建RESTful API的核心技能:
1. 使用Express框架快速創建服務
2. 定義不同HTTP方法的路由(GET/POST/PUT/DELETE)
3. 處理請求參數(路徑參數、請求體)和返回響應
4. 處理錯誤狀態碼(404、400等)和響應內容
5. 路由模塊化設計(進階)
接下來可以嘗試連接數據庫(如MongoDB、MySQL),將模擬數據替換爲真實數據,逐步完善你的API功能!