nodejs 在路由中使用通配符以及轉交控制權

var express = require('express');
//var app = express.createServer(); //該方法已被刪除


var app = express();


app.get('/a*', function(req,res) {
console.log(req.params[0]) //獲取參數
res.send('a');
// 匹配 /afoo /a.bar /a/qux 等
});


app.get('/a*/c*d', function(req,res) {
res.send('b');
// 匹配 /b/cd /b/cfood /b//c/d/ 等
// 不匹配 /b/c/d/foo
});
app.get('*', function(req, res) {
res.send('*');
// 匹配 /a /c /b/cd /b/c/d /b/c/d/foo
// 不匹配 /afoo /bfoo/cbard
});

app.listen(9001);


當使用通配符來構建路由時, 兩個通配符之間的標記必須匹配, 除非它是可選的。通配符通常用在包含(.) 的文件名中。 還需要注意的是, 與許多其他正則表達式語言不同,* 表示的不是零個以上字符, 它表示的是一個以上字符。 一個斜槓(/) 在匹配通配符的時候可以認爲是一個字符。
另外需要注意的是, 路由是按順序執行的。 當多個路由同時匹配上提供的
URL 時,只有第一個匹配的路由會執行相關的動作, 也就是說, 如何安排路由的順序是很重要的。 在前面的例子裏, 即便通配符能夠匹配所有的URL, 它也只能捕獲前面的路由未能匹配的URL

例如:http://127.0.0.1:9001/a/cdsd 既匹配第一個,也匹配第二個,但是同時app.get的時候,只會執行第一個

有時候, 你會希望同一個 URL 在不同的情景下匹配上多個路由。 我們已經看到了路由定義的順序會決定哪個路由被選中使用。 但是, 當某些條件不滿足的時候, 依然有辦法可以把控制權傳給下一個路由, 這在許多情況下會很有用。 如下:

app.get('/users/:id', function(req, res, next){
var id = req.params.id;
if (checkPermission(id)) {
//
顯示個人頁面
} else {
next(); //我們對路由的處理函數增加了一個新的參數, next 參數會通知路由中間件去調用下一個路由
}
});
app.get('/users/:id', function(req, res){
//
顯示公共頁面
});



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章