我們知道Express是一個基於NodeJS的非常優秀的服務端開發框架,本篇將介紹express框架的route路由。如果你還是不太理解,相信看完本篇文章將會有些收 獲的。(原文地址:
)express 封裝了多種 http 請求方式,我們主要只使用 get和post,可以使用 app.all 獲取所以請求方式,回調函數有兩個參數分別是 req 和 res,代表請求信息和響應信息。
-
req.query
: 處理 get 請求
-
req.params
: 處理 /:xxx 形式的 get 請求
-
req.body
: 處理 post 請求
-
req.param()
: 可以處理 get 和 post 請求,但查找優先級由高到低爲req.params→req.body→req.query
例如:
獲取表達post的參數
var username=req.body.name;//獲取post參數 var password=req.body.password;
獲取get參數
訪問URL:http://localhost:3000/test?id=110&password=120
獲取代碼:
app.get('/test',function(req,res){ res.send("id: "+req.query.id+" password: "+req.query.password); })
結果:
一. *通配URL
例如:
app.get('/test/*',function(req,res){ res.send(req.originalUrl);//req.originalUrl獲取當前URL });
*號可以通配URL爲localhost:3000/test/.......的URL
運行結果:
二. /:id的佔位標識符URL
例如:
app.get('/test/:userid',function(req,res){ res.send("userid: "+req.params.userid);//req.params.userid獲取userid的值 });
運行結果:
不能繼續使用/
三.next()權限控制轉移
express的路由控制有個next()功能,在定義了多個路由的時候,使用next對匹配的url會按順序執行,
如果不使用next進行權限轉移,只會執行第一個滿足的路由規則。
<span class="token comment">next() 函數用於將當前控制權轉交給下一步處理,如果給 next() 傳遞一個參數時,表示出錯信息</span>
例如:
app.get('/test/*',function(req,res,next){
//res.send("userid:");//要進行轉移,不要響應客戶端
req.temp="給你控制權";
next();//把權限轉移到下一個路由
});
app.get('/test/next',function(req,res){
res.send("content: "+req.temp);
})
訪問URL:http://localhost:3000/test/next滿足這兩個路由規則
運行結果:
next()一般用來編寫中間件
- 中間件一般不直接對客戶端進行響應,而是對請求進行一些預處理,再傳遞下去;
- 中間件一般會在路由處理之前執行;
比如:
// 檢查用戶是否登錄中間件,所有需要登錄權限的頁面都使用此中間件
function checkLogin (req, res, next) {
if (req.session.user) {
next();//檢驗到用戶已登入,轉移權限閣下一個路由
} else {
res.redirect('/');//否則,頁面重定位,不執行下面路由
}
}