express路由規則及寫法

我們知道Express是一個基於NodeJS的非常優秀的服務端開發框架,本篇將介紹express框架的route路由。如果你還是不太理解,相信看完本篇文章將會有些收 獲的。(原文地址:http://hm4123660.iteye.com/blog/2195035)

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('/');//否則,頁面重定位,不執行下面路由
  }
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章