Home > Blockchain >  how can i make url shortener api in express.js?
how can i make url shortener api in express.js?

Time:12-30

I'm doing a link shortener. The link shortener works very well but now I'm trying to do API for it. The problem is that if I pass the URL argument in the get URL it's not working. I tried a lot of things but it's not working. When I do like http://localhost:3500/api/create/google.com it works but when I do http://localhost:3500/api/create/https://google.com it's not working because of the https://. These are the last 3 inputs via my API that failed: http://https:google.com, google.com, http:// I'm using express and mongoose. Here's my code:

app.get('/api/create/:shortUrl(*)', async (req, res, next) => {
if (req.params.shortUrl.includes("https://") || req.params.shortUrl.includes("http://") || req.params.shortUrl.includes("/")) {
    req.params.shortUrl = req.params.shortUrl.replace("https://", "").replace("http://", "").replace("/", "")
}
if (req.params.shortUrl == "") {
    res.send("invalid URL")
}
    await shorturl.create({full: `http://${req.params.shortUrl}`})
    const shortUrls = await shorturl.find().sort({_id: -1}).limit(-1)
    const latest = shortUrls[0]
    res.send("https://p33t.link/"   latest.short)

});

CodePudding user response:

You have to properly encode portions of the URL that contain restricted characters such as : and // that aren't part of the actual protocol to make it a legal URL. So, the idea is that you encode the "parameter" before appending it to the URL. Presumably, you would use encodeURIComponent(), depending upon exactly where you're placing it in the URL.

After parsing the core part of the URL, a web server will decode the remaining components of the URL and give you back the original characters. I would suggest that your particular use would probably work better as a query parameter rather than a part of the path which would give you this when properly encoded:

http://localhost:3500/api/create?u=https://google.com

And, you could then use:

app.get('/api/create', (req, res) => {
    console.log(req.query.u);
    ...
});
  • Related