2013-12-17 62 views
1
app.get('/users/:userId/profile', ProfileHandler); 
app.get('/page/:userId/profile', ProfileHandler); 
app.get('/photo/:userId/profile', ProfileHandler); 

如果我有上述3條路由,我如何捕獲第一部分,以便處理程序知道正在請求什麼?我希望將userspagephoto作爲請求對象的一部分發送給處理程序。捕獲node.js路由的一部分

理想情況下,我想避免使用正則表達式來製作這條單一路由,因爲這只是我實際用例的一個虛擬例子。

+0

[這個答案](http://stackoverflow.com/questions/15482959/express-js-how-to-make-app-get-useridi-in-req-param)可能會導致您在正確的方向。你也可以用一個正則表達式來匹配數據,比如'req.params [0]'等等。 – numbers1311407

回答

0

根據您使用的模式,ProfileHandler將傳遞一個req和res對象。 req有一個url屬性,您可以拆分並切換大小寫:

app.get('/users/:userId/profile', ProfileHandler); 
app.get('/page/:userId/profile', ProfileHandler); 
app.get('/photo/:userId/profile', ProfileHandler); 

function ProfileHandler(req,res){ 
    var reqType = req.url.split('/')[1]; 
    switch(reqType){ 
     case 'users': 
     //DO SOMETHING COOL 
     break; 
    } 
} 

或者,您可以添加在請求上設置該值的中間件。

app.use(function (req, res, next) { 
    var reqType = req.url.split('/')[1]; 
    req.handlerTarget = reqType; 
}); 

function ProfileHandler(req,res){ 
    switch(req.handlerTarget){ 
     case 'users': 
     //DO SOMETHING COOL 
     break; 
    } 
} 
1

如果你事先知道你的綁定,爲什麼不把信息傳遞給那裏呢?

app.get('/users/:userId/profile', ProfileHandler.bind(null, 'users')); 

function ProfileHandler(pageRoot, req, res, next){ 
    switch (pageRoot){ 
     case 'users': 

      break; 
     case 'page': 
      break; 
    } 
});