2017-08-06 15 views
0

私はこのルートを持っています/new/:url。今、私が/new/https://www.google.comのような要求をするとき、私は応答としてCannot GET /new/https://www.google.comを得ます。私が期待するのは、文字列https://www.google.comを得ることです。私はURL component encoding in Node.jsのURLのエンコーディングについてこの答えを読んだが、の要求がルート/new/:urlになされたとき、どのようにすることができるだろうか?そのルートのコードはこちらです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]を動作するはずですhttp://www.yourapp.com/new/https://www.google.comと 012の部分がhttps://www.google.comになりますは元のhttp://www.yourapp.com/を提供します。

+0

これは機能します。しかし、なぜ私のルートハンドラが動作しないのか分かりません。この方法ではURLをエンコードしないため、URLの別個の部分として 'https:// www.google.com'の'/'を扱わず、応答を破棄する理由もありません。 –

+0

これはうまくいくかもしれませんが、すべてのパラメータはURLコンポーネントとして転送中にエンコードする必要があります。 – Wartoshika

0

コード化されたURLにルーティングする必要があります。ルータコールバック関数では、urlコンポーネントをデコードする必要があります。

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

そして、あなたはこの/newセクションへのリンク部分が渡されたURLを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

フロントエンドフレームワークを使用していますか?バックエンドlibは高速です(私は思う)フロントエンドは仕事をする必要があります。私の答えを編集して、フレームワーク以外の例を提供してください。 – Wartoshika

関連する問題