2014-03-24 65 views
0

我目前的路由查找是app.get('/s/:key', ...,但是有一個很好的理由能夠以相同的方式獲得其他密鑰。有可能我需要獲得路徑 - 所以基本上我想要捕獲app.get('/s/:key/more/stuff/here/', ...並能夠獨立於/more/stuff/here部分讀取密鑰。我沒有將其他參數作爲參數數組捕獲的問題,然後將它們連接起來,但我不知道該怎麼做 - 如果我嘗試捕獲除/s/:key之外的任何內容而沒有任何以下內容,我會得到404s。我如何才能獲得路徑作爲快捷鍵?

有沒有辦法做到這一點?在expressjs

+0

對不起,我有點糊塗了。你想要捕捉什麼? '/ more/stuff/here'?如果你使用'/ s /:key'作爲你的路線,你會得到404嗎? – aiapatag

回答

2

字符串路線就像是一個正則表達式使他這樣說,你可以用星號*作爲通配符:

app.get('/s/:key/*', function(req, res, next) { 
    var key = req.params.key; 
    var someOtherParams = req.params[0]; 
}); 

,這將是:

然後從那裏你可以解析你的通配符。就像分割它/


或者如果你想成爲嚴格的,它不應該有其他字符字母數字以外,斜線和破折號,直接在路線上使用正則表達式。因爲在expressjs上,你不能做一個字符串路由包含一個斜槓的參數,然後使用正則表達式並捕獲該參數。這有點奇怪,但你可以看看這個answer的解釋。

無論如何,對於代碼做你的路線上的正則表達式:

app.get(/s\/([A-Za-z0-9]+)\/(([A-Za-z\-\/]+)*$)/, function(req, res, next) { 
     var key = req.params[0]; 
     var someOtherParams = req.params[1]; 
    }); 

這是捕獲2組(req.params[0] - >([A-Za-z0-9]+)req.params[1] - >(([A-Za-z\-\/]+)*$))。

第一組實際上是您的密鑰,第二組是可以包含字母數字,短劃線和斜線的參數。您可以通過斜線來分析或分割。這樣,您的路線就足夠嚴格,不會包含任何其他字符。

結果將是:

1

嘗試使用這樣的:在您的請求處理程序回調

app.get('/s/:key/*', function(req, res, next) { 
    var key = req.params.key; 
    var restAfterKey = req.params[0]; 
    // Work on response or pass on to next(); 
} 

這樣:

  • req.params.key是值了:關鍵的佔位符
  • req.params[0]將持有跟隨後一切:關鍵佔位
相關問題