Express 框架入門#
Express 是 Node.js 最流行的 Web 框架,提供簡潔的 API 來處理路由、中介軟體(Middleware)和 HTTP 請求,大幅簡化伺服器開發。
1. 安裝 Express#
1
2
| npm init -y
npm install express
|
2. 第一個 Express 應用程式#
1
2
3
4
5
6
7
8
9
10
| const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello, Express!");
});
app.listen(3000, () => {
console.log("伺服器啟動於 http://localhost:3000");
});
|
express():建立 Express 應用程式實例。app.get(path, handler):定義 GET 路由。res.send():傳送回應(自動設定 Content-Type)。app.listen(port, callback):啟動伺服器監聽指定埠號。
3. 路由(Routing)#
Express 支援所有 HTTP 方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| app.get("/users", (req, res) => {
res.send("取得使用者列表");
});
app.post("/users", (req, res) => {
res.send("新增使用者");
});
app.put("/users/:id", (req, res) => {
res.send(`更新使用者 ${req.params.id}`);
});
app.delete("/users/:id", (req, res) => {
res.send(`刪除使用者 ${req.params.id}`);
});
|
路由參數#
:id 是路由參數,透過 req.params 取得:
1
2
3
4
| app.get("/users/:id", (req, res) => {
const userId = req.params.id;
res.send(`使用者 ID:${userId}`);
});
|
查詢字串#
透過 req.query 取得 URL 查詢字串(?key=value):
1
2
3
4
5
| // GET /search?q=nodejs&limit=10
app.get("/search", (req, res) => {
const { q, limit } = req.query;
res.send(`搜尋:${q},最多 ${limit} 筆`);
});
|
4. 中介軟體(Middleware)#
中介軟體是一個函數,在請求到達路由處理器之前(或之後)執行,可用於記錄日誌、驗證身份、解析請求主體等。
1
2
3
4
5
| // 自訂中介軟體
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next(); // 呼叫 next() 繼續到下一個中介軟體或路由
});
|
解析 JSON 請求主體#
Express 內建 JSON 解析中介軟體:
1
2
3
4
5
6
| app.use(express.json());
app.post("/users", (req, res) => {
const { name, email } = req.body; // 直接取用解析後的資料
res.json({ message: "建立成功", user: { name, email } });
});
|
靜態檔案#
1
2
| app.use(express.static("public"));
// public/ 目錄下的檔案可直接透過 URL 存取
|
5. 路由模組化#
將路由拆分到獨立檔案,保持程式碼整潔:
routes/users.js:
1
2
3
4
5
6
7
8
9
10
11
12
| const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
res.json([{ id: 1, name: "Alice" }]);
});
router.get("/:id", (req, res) => {
res.json({ id: req.params.id, name: "Alice" });
});
module.exports = router;
|
app.js:
1
2
3
4
5
6
7
8
9
| const express = require("express");
const usersRouter = require("./routes/users");
const app = express();
app.use(express.json());
app.use("/users", usersRouter);
app.listen(3000);
|
6. 錯誤處理#
Express 的錯誤處理中介軟體需要四個參數(err, req, res, next):
1
2
3
4
| app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: "伺服器內部錯誤" });
});
|
Reference#