express的路由(Route)功能


之前:

子模塊:var  router = express.router(); 使用router.get,router.post設置子路由,主模塊引入子模塊,並添加到中間件中app.use('/getConfig')   ============上篇隨筆中有寫到

看到其他博客中,這叫做:路由拆分(設置二級路由)獲取動態數據 

修改:

子模塊:var app = express(); 使用app.use,app.get/post;主模塊引入子模塊,並添加到主模塊的app實例的中間件中app.use('/getConfig')  

知識點:

1、中間件:訪問到最終目標之前做的事情,可以使用app.use,參考

功能):

  1.可以進行權限判斷
  2.可以對res和req的屬性進行擴充
  3中間鍵放在要執行的路徑上面
  4中間鍵默認情況下都匹配,可以指定匹配什么開頭

使用):在匹配到路由返回數據之前,如果想做一些處理,可以使用中間件

 

 

 

express內部有個map,對於每一種請求方法(get,post...)都有映射,每個都映射到一個 路由對象的數組。

//var app = express();
app.get('/',callback);//callback是一個函數
 
//map的get屬性就會push進一個Route,即使多次對同一個路徑進行app.get。當然可以給app.get的第二個參數傳一個函數的數組,下面兩段代碼的執行效果是一樣的
 
//first
app.get('/',[callback1,callback2]);
 
//second
app.get('/',callback1);
app.get('/',callback2);

第一個map的get數組里,會push進1個Route(里面的callbacks有2個元素),而第二個是push進2個Route(每一個的callbacks只有一個元素)

express 要路由到相應的處理函數,需要method和path兩個都滿足條件。

1.method就是'get'、'post'等,根據這個來找到map中相應的屬性

2.然后在數組中,檢查path是否符合里面的Route的要求,如果符合,相應的callback函數會依次(看后面的解釋)執行。callback函數:

function(req,res,next){}

如果一個callback沒有結束一個請求響應的生命周期( 比如寫下res.end('...') ),那么一般需要在最后寫上next(),像下面那樣,這樣,就會繼續檢查下面的一個Route

function(req,res,next){
    //..自己的業務邏輯
    next();
}

如果callback中,會終結一個請求響應周期(一般也是這樣),那么不應該有next(),也不會繼續檢查下一個Route

//一般路由函數都應該和這個類似
function(req,res,next){
    //..自己的業務邏輯
    res.end('...');//或res.render('...')等
}
例如:
在app.js中的
app.get('/', routes.index);

的上面寫下

app.get('/',function(req,res,next){
    console.log("11");
    next()
});
app.get('/',function(req,res,next){
    console.log("22");
    next()
});

那么請求主頁的時候,控制台會依次輸出11,22,最后執行routes.index 函數,向瀏覽器發送數據。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM