我有这条路线/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
});
});
答案 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();