之前:
子模塊: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 函數,向瀏覽器發送數據。