Express 4 來了!好用的 Router 機制
還記得前陣子,就在書將出版之際,半路殺出來最新的 Express 4,使得筆者手忙腳亂,緊急通知出版社修改書的內容。將所有使用到 Express 的範例,都特別加上版本號的指定,讓讀者在照著範例做時,能夠使用舊的 Express 3.0,而不會發生任何問題。最新的 Express 4 雖然效能提升不少,也有一些好用的新東西,但和舊版有些微 API 的不相容,此外,也因為是新東西,可能很多東西的支援會發生問題,如果舊版本在上線的產品中運行相當穩定,建議先不要急著升級。
Express 4 做了一些改進,有不少新東西,其中相當值得提的一項就是路由機制(Router)的翻新。如果你以前在使用 Node.js + Express 開發網站服務時,因為 Router 很難管理而痛苦不已,這將是一個你會愛上的功能改進。
答案是可以的,你可以直接使用 param() 設計一個 Middleware,去安插一個檢查程式在前面,並指定他要檢查什麼 Parameter 欄位。
下面的例子和前一個例子有相同功能:
Express 4 帶來了新的方法,讓我們可以更好的管理 Router,這讓開發者們可以輕鬆許多,如果你有新的專案要開跑,不妨快來嘗試一下全新的 Express!
Express 4 做了一些改進,有不少新東西,其中相當值得提的一項就是路由機制(Router)的翻新。如果你以前在使用 Node.js + Express 開發網站服務時,因為 Router 很難管理而痛苦不已,這將是一個你會愛上的功能改進。
傳統的使用方法
傳統的 Router 設定方法依然可以運作,我們可以放心使用。var express = require('express'); // Create express application var app = express(); // Apply this router on (/apis/user) app.get('/', function(req, res) { // Home }); app.listen(8000);
新 Router 物件的使用方法範例
除了舊的方法之外,你可以用 Router() 去建立一個 Express 的 Router 物件,然後管理你一系列的路由規則。var express = require('express'); // Create express application var app = express(); // Create a router to handle routes for a set of user API var userAPI = express.Router(); // Sign in (/apis/user/signin) userAPI.post('/signin', function(req, res) { // ... }); // Sign out (/apis/user/signout) userAPI.get('/signout', function(req, res) { // ... }); // Sign up (/apis/user/signup) userAPI.post('/signup', function(req, res) { // ... }); // Apply this router on (/apis/user) app.use('/apis/user', userAPI); app.listen(8000);
一次指定多種方法到同個路徑
有時候,同一個路徑我們想賦予他不同的方法(如:GET 或 POST),讓它有不同的功能。這尤其是在開發 Restful API 時,非常常用。像是如果我們要設計一套管理使用者帳號(User)的 API 時。var userMgrAPI = express.Router(); // A set of API to manage users (/apis/admin/user/:username) userMgrAPI.route('user/:username') .get(function(req, res) { // Getting user information }) .post(function(req, res) { // Create a new user }) .delete(function(req, res) { // Delete specific user }) .put(function(req, res) { // Update }); app.use('/apis/admin', userMgrAPI);
檢查 Parameter 的 Middleware
前面的例子,在路由上設計了一個 username 的 Parameter,每個方法的 Handler 都會用到它。但有一個需求是,既然每個 Handler 都會用到這個 Parameter,也需要檢查這個使用者帳號是否存在,那麼是否可以用類似 Middleware 的做法,寫一次程式套用在所有方法上?答案是可以的,你可以直接使用 param() 設計一個 Middleware,去安插一個檢查程式在前面,並指定他要檢查什麼 Parameter 欄位。
userMgrAPI.param('username', function(req, res, next, username) { if (username == 'fred') { next(); }else { res.send(404); } }); // userMgrAPI.route('user/:username') ...
設計一個其他的 Middleware
如果你過去已經熟悉 Express 的開發,應該對開發一個 Middleware 不陌生,在 Express 4 的 Router 上,你也可以引用。通常我們會設計一個 Middleware 去檢查使用者登入與否,或是前面例子所提及的,檢查使用者是否存在,而不需要在每個路徑的 Handler 中都寫一次。下面的例子和前一個例子有相同功能:
userMgrAPI.use(function(req, res, next) { if (req.params.username == 'fred') { next(); }else { res.send(404); } }); // userMgrAPI.route('user/:username') ...
後記
Express 4 帶來了新的方法,讓我們可以更好的管理 Router,這讓開發者們可以輕鬆許多,如果你有新的專案要開跑,不妨快來嘗試一下全新的 Express!
留言
張貼留言