2017-03-24 161 views
1

在我的快遞應用程序,我有一個路由器聽api/shorten/如何在express中傳遞一個url作爲「url參數」?

router.get('api/shorten/:longUrl', function(req, res, next) { 
     console.log(req.params.longUrl); 
    } 

當我使用類似:

http://localhost:3000/api/shorten/www.udemy.com 

我得到www.udemy.com這是我的期望。

但是當我使用:

http://localhost:3000/api/shorten/http://www.udemy.com 

我得到一個404錯誤。

我想獲得http://www.udemy.com當我訪問req.params.parameter

+0

您必須將url作爲正文或至少在查詢參數中傳遞,而不是附加到原始url本身。您得到的錯誤是因爲瀏覽器會將其過濾掉 – binariedMe

+0

您必須對附加的URL進行編碼,因爲像':'這樣的字符除了在協議中是不允許的,所以不能在URL的路徑中使用。 – jfriend00

+1

@binariedMe - 這是不正確的。如果編碼正確,它可以在路徑中。 – jfriend00

回答

5

我不確定您是否仍在尋找解決這個問題。也許,以防萬一有人在試圖找出同樣的事情,這是一個簡單的解決問題的方法:

app.get('/new/*', function(req, res) { 

    // Grab params that are attached on the end of the /new/ route 
    var url = req.params[0]; 

這樣你就不必出汗任何斜槓被誤認爲是路線或目錄,它會抓取/ new /後的所有內容。

+0

謝謝@Allan。我已經找到了這個解決方案,但是你的答案對其他面臨同樣問題的人有幫助。我會接受它,因爲這是我用來解決我的問題的答案。 –

0

你需要逃出像這樣:

escape("http://www.google.com") 

將返回:

"http%3A//www.google.com" 
+0

感謝您的迴應,但我想解決它,而不編碼它,我想傳遞它,並在服務器端處理。 –

+0

好吧把路由改成 「api/shorten /:longUrl *」 –

0

您需要在Express服務器使用在客戶端encodeURIComponentdecodeURIComponent,這將編碼所有不允許來自url參數的字符,如:/

+0

我在設計一個API,所以我無法控制客戶端..我不能在客戶端進行編碼,我必須在服務器只有 –