简体   繁体   中英

Pass URL as query parameter in node js

I am trying to hit the URL http://localhost:3000/analyze/imageurl=https://www.google.com/ from my browser.

However, due to the presence of // , it does not correctly hit the URL, and gives me an error message, Cannot GET /analyze/imageurl=https://www.google.com/

If I get rid of the backquotes as follows, http://localhost:3000/analyze/imageurl=httpswww.google.com/ , it does work correctly.

My backend API looks like this

app.get('/analyze/:imageurl', function (req, res) {
 console.log('printing image url:' + req.params.imageurl);
}

Is there a way I can pass in the imageurl with backquotes as a query parameter?

You need to encode your URL before pass it on query string, using encodeURIComponent . For example:

var urlParam = encodeURIComponent('https://www.google.com/');
console.log(urlParam); // https%3A%2F%2Fwww.google.com%2F
var url = 'http://localhost:3000/analyze/' + urlParam;
console.log(url); // http://localhost:3000/analyze/https%3A%2F%2Fwww.google.com%2F

// Decode it in API handler
console.log(decodeURIComponent(urlParam)); // https://www.google.com/

encodeURIComponent

One approach could be to use Express' req.query in your route. It would look something like this:

// Client makes a request to server
fetch('http://localhost:3000/analyze?imageurl=https://google.com')
// You are able to receive the value of specified parameter 
// from req.query.<your_parameter>
app.get('/analyze', (req, res, next) => {
    res.json(req.query.imageurl)
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM