Express 4.2.0 項目中,路由文件 login.js 僅定義了 router.get('/'),需新增 POST 請求處理。
// login.js
var express = require('express');
var router = express.Router();
// GET /login
router.get('/', function(req, res) {
res.render('login'); // 返回登錄頁面
});
// POST /login ← 新增這裡
router.post('/', function(req, res) {
// 1. 獲取表單數據(需 body-parser 中間件)
var username = req.body.username;
var password = req.body.password;
// 2. 業務邏輯驗證...
if (validate(username, password)) {
req.session.user = username;
res.redirect('/dashboard');
} else {
res.render('login', { error: 'Invalid credentials' });
}
});
module.exports = router;
var bodyParser = require('body-parser');
// 解析 application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// 解析 application/json
app.use(bodyParser.json());
// 路由掛載
app.use('/login', require('./routes/login'));
注意:Express 4.16+ 內置 express.urlencoded() 和 express.json(),可替代 body-parser:
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
| HTTP 方法 | Express 路由方法 | 典型用途 |
|---|---|---|
| GET | router.get() | 獲取資源、渲染頁面 |
| POST | router.post() | 提交表單、創建資源 |
| PUT | router.put() | 完整更新資源 |
| PATCH | router.patch() | 部分更新資源 |
| DELETE | router.delete() | 刪除資源 |
| ALL | router.all() | 匹配所有方法(中間件常用) |
router.post('/user/:id', handler); // 參數
router.post('/report-:year-:month', handler); // 正則風格
router.post(/^\/api\/v\d+\/items$/, handler); // 正則對象
body-parser → req.body 為 undefined。extended: true 使用 qs 庫解析嵌套對象,false 用 querystring,一般用 false。掌握 router.METHOD() 模式,是 Express 開發的基礎技能。