如何将URL作为参数传递给另一个URL?

时间:2017-08-06 05:51:02

标签: javascript node.js express url

我有这条路线/new/:url。现在,当我发出/new/https://www.google.com之类的请求时,我会得到Cannot GET /new/https://www.google.com作为回复。我期望获得字符串https://www.google.com。我阅读了有关对网址进行编码的答案URL component encoding in Node.js,但在对GET路由发出/new/:url请求时,我将如何才能这样做?这是我的路线代码

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

2 个答案:

答案 0 :(得分: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.com部分 req.hostname将为您提供原始http://www.yourapp.com/

答案 1 :(得分:0)

您必须路由到已编码的网址。在路由器回调函数中,您应该解码url组件。

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

您链接到此/new部分的部分应encodeURIComponent()传递的网址。

编码的网址应该看起来像/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();