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#