2017-08-06 204 views
0

我有這條路線/new/:url。現在,當我提出/new/https://www.google.com的請求時,我得到Cannot GET /new/https://www.google.com作爲迴應。我期望的是得到字符串https://www.google.com。我讀了關於編碼URL的這個答案URL component encoding in Node.js,但是如果對路由/new/:url發出GET請求,我怎麼能這樣做呢?這是我的路線代碼如何將URL作爲參數傳遞給另一個URL?

app.get('/new/:url',(req,res) => { 
    const url = encodeURIComponent(req.params.url); 
    console.log(url); 
    res.json({ 
    url 
    }); 
}); 

回答

1

你可以做一個嘗試wildcard路由,沒有測試過這種方式,但它應該工作

app.get('/new/*',(req,res) => { 
    const url_param = req.params[0]; 
    const url = req.hostname; 
    console.log(url,url_param); 
    res.json({ 
    url 
    }); 
}); 

req.params[0]會給你https://www.google.com部分的http://www.yourapp.com/new/https://www.google.comreq.hostname會給你原來的http://www.yourapp.com/

+0

這有效。但我不明白爲什麼我的路由處理程序不起作用?這種方法也不會對URL進行編碼,那麼爲什麼它不會將'https:// www.google.com'中的'/'作爲url的單獨部分並打破響應。 –

+0

這可能會起作用,但每個參數都應該在作爲url組件進行傳輸時進行編碼。 – Wartoshika

0

您必須路由到編碼的網址。在你的路由器回調函數中,你應該解碼url組件。

app.get('/new/:url',(req,res) => { 
    const url = decodeURIComponent(req.params.url); 
    console.log(url); 
    res.json({ 
    url 
    }); 
}); 

你在哪裏鏈接到本/new部分應encodeURIComponent()傳遞的URL部分。

編碼後的網址應該會像/new/http%3A%2F%2Fgoogle.de

前端部分:

const baseUrl = '/new'; 
const urlParameter = 'http://example.com'; 
const targetUrl = `${baseUrl}/${encodeUriComponent(urlParameter)}`; 
const method = 'GET'; 

const xhr = new XMLHttpRequest(); 
xhr.open(method,targetUrl); 
xhr.onload =() => { 

    const jsonCallback = JSON.parse(xhr.response); 
} 

xhr.send(); 
+0

我該怎麼做?你能舉一個例子嗎? –

+0

你使用前端框架嗎?由於後端庫是明確的(我認爲)前端應該完成這項工作。我編輯我的答案以提供非框架示例。 – Wartoshika

相關問題