javascript - How to get a url as a param in Node.js? -


code:

app.get("/:url", function(req,res) {     var url = req.params.url;     res.send(url); }); 

problem:

this not work.

if try:

http://localhost:3000/https://www.google.com 

i get:

cannot /https://www.google.com 

you can try this, using regex:

var app = require('express')();  app.get(/^\/(.*)/, function (req, res) {      var url = req.params[0];     res.send(url);  });  app.listen(3000, () => console.log('listening on 3000')); 

when run:

curl http://localhost:3000/https://www.google.com 

the server should return:

https://www.google.com 

update

there controversy whether or not colons legal in urls.

see question details:

according rfc 3986 legal url:

http://localhost:3000/https://tools.ietf.org/html/rfc3986 

but note while legal well:

http://localhost:3000/https://tools.ietf.org/html/rfc3986#section-3.3 

if entered url in browser, server get:

/https://tools.ietf.org/html/rfc3986 

in request. reason while not strictly necessary still recommend url-encoding url put in other urls - see answer zac delventhal.

experiment

using above code example, command:

curl http://localhost:3000/https://www.google.com/ 

will output this:

https://www.google.com/ 

but command:

curl 'http://localhost:3000/https://www.google.com/#fragment' 

will output this:

https://www.google.com/ 

note used single quotes above not because necessary here - they're not, see this:

echo http://localhost:3000/https://www.google.com/#fragment 

but show hash fragment doesn't disappear because treated comment shell in case thought that reason. not sent when quotes used, , happens can demonstrated -v switch of curl:

* connected localhost (127.0.0.1) port 3000 (#0) > /https://www.google.com/ http/1.1 > user-agent: curl/7.35.0 > host: localhost:3000 > accept: */* 

as can see hash fragment not sent http impossible server know existed.

incidentally, demonstrates using un-encoded url within other urls not mess proxy, because http requests proxy servers send this:

get https://www.google.com/ http/1.1 

and not this:

get /https://www.google.com/ http/1.1 

so cannot confused. (note slash.)


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -