2015-04-28 41 views
1

當我派:在表達我有一個不匹配的路線,我想知道爲什麼?

PATCH /55148df6935c4bac084b30b2/token/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NTE0OGRmNjkzNWM0YmFjMDg0YjMwYjIiLCJpYXQiOjE0MzAyNTE2OTg5NDIsImV4cCI6MTQzMDI1MTkzODk0Mn0.n8Itqpaf7hjyq23ke977S0oamqXSwEF9iFR62Mlo9Sw 

我總是回到404?爲什麼?我錯過了什麼?

這條路線是

router.patch('/:id/token/(.+)/', ...) 

顯然我錯過了一些假設。字符串是否太長?是個 '。'在字符串中造成問題?你能幫我嗎?

回答

1

Express在這樣的路徑中不接受原始正則表達式模式。您需要將它們附加到命名的路由參數。你可以像這樣指定一個正則表達式::token([\\w\.]+),但默認的:token應該已經匹配你的測試字符串。例如,這可能是你在找什麼:

router.patch('/:id/token/:token', function(req, res) { 
    console.log('My ID:', req.params.id); 
    console.log('My token:', req.params.token); 
}) 

不過我也建議在請求的主體,而不是在請求路徑發送PATCH數據。您可以將它們作爲URL編碼的表單參數(例如token=1234abcd)或以JSON形式發送。這更加「規範」,另一個優點是您沒有可能將敏感信息保存在瀏覽器歷史記錄和HTTP日誌中。

+0

在發佈這個問題之前,我嘗試的第一件事就是嘗試你對'/:id/token /:token'的建議,因爲這很容易做。但是404失敗了 - 但爲什麼是這個難題。但我同意更好,更經典的做法是轉移發送:令牌作爲參數。我會這樣做,然後回報。感謝您的建議! – JoelParke

+0

令人驚訝地轉移到'/:id'併發送:PATCH http://example.com/55148df6935c4bac084b30b2?token=eyJ0eXAi...TgsImV4cCI6MTQzNTUwMzQzMTc1OH0.NuRrUBR-hQBlT7sXz36Y_oHAKipDOHupEt2zneKUN-o給出404(未找到)像以前一樣....下一頁我會嘗試發送json並隱藏這個奇怪的令牌結構。 – JoelParke

+1

當我仔細查看時,我意識到在我的代碼中我有一個缺失的s ...即正確的路徑是'/ api/users /:id',並且'/ api/user /:id'因此是404現在所有的方式都如預期的那樣。感謝您的洞察力。 - 我最喜歡的一句話:'啞巴真的很強大':-)。 – JoelParke

相關問題