Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

Sorry, you do not have permission to ask a question, You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please type your username.

Please type your E-Mail.

Please choose an appropriate title for the post.

Please choose the appropriate section so your post can be easily searched.

Please choose suitable Keywords Ex: post, video.

Browse

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 8518

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Latest Questions

Author
  • 60k
Author
Asked: November 28, 20242024-11-28T01:54:09+00:00 2024-11-28T01:54:09+00:00

Making a URL Shortener website using Axios

  • 60k

In this article I will tell you how I made and you can also make a URL shortener Website. Check out the result of what we are gonna make: here.

Overview

First we will talk about the requirements and dependencies of this project.
In this project we will use Axios to make a HTTP request (you can also use XML request for Fetch api to do the same), and Hint.css for hints (not necessary).

Well basically no library mentioned above was necessary for this project, they are here just cause they will make our work easier and will save a lot of time.

Logic/Working:
We will add a input tag in which the user will be able to paste his link and a 'Shorten' button. On click of that button a AXIOS request will be fired and then we will pass the response to the output box. However this seems easy and it is! for a person who knows how to handle API'S response, JSON data and manage errors for multiple cases.
As a beginner you don't have to worry I have covered each and every step mentioned above with good examples.

Getting started

First of all what we need is a Good Design so that it will also look good. I have already designed a Website for this project here it is:
design

(However I am not a designer so sorry if the design is bad)
In this design there is a heading, a sub-heading, a input tag for pasting link, a convert button and three boxes for displaying result.
I've used button tags for displaying output (You can also use Input tag).

If you want, you can make the whole website from starting or if you want to follow along or save some time start with this codepen (for basic HTML and CSS) :

Adding onclick event

First of all we will add a event to 'convert' button i.e. onclick and pass a function which will execute when the button is clicked:

// function name is 'shorten' <button type="submit" class="shorten-button font-2" onclick="shorten()">     Convert </button>  
Enter fullscreen mode Exit fullscreen mode

Then we will define this function in JS:

const shorten = () => {     console.log('button clicked') } 
Enter fullscreen mode Exit fullscreen mode

Don't forget to link the JS file if you are editing outside of codepen.
Then when the button is clicked a message should appear on console.

Making a request with Axios

Now we will work on the Axios request when the button is clicked.
Don't know Axios here's a quick intro:

  • Axios is a popular, promise-based HTTP client that sports an easy-to-use API and can be used in both the browser and Node.

    • It's syntax is super simple and beginner friendly.

Basic Axios syntax:

axios.get('API url') .then((response) => {     // if the request was Sucessful and no errors were caught     console.log(response) }) .catch((error) => {     // if errors were there.     console.log(error) }) 
Enter fullscreen mode Exit fullscreen mode

Before using Axios don't forget to link the Axios package to your HTML file

<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.21.1/axios.min.js" integrity="sha512-bZS47S7sPOxkjU/4Bt0zrhEtWx0y0CRkhEp8IckzK+ltifIIE9EMIMTuT/mEzoIMewUINruDBIR/jJnbguonqQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> 
Enter fullscreen mode Exit fullscreen mode

Making API call

For the URL shortening we will use a free URl shortening api provider SHRTCODE. You can visit the website and read the docs for more info.

This is the main link for calling the API:

https://api.shrtco.de/v2/shorten?url=YOUR_URL 
Enter fullscreen mode Exit fullscreen mode

Now we will just add the link to our Axios request in the 'get' method:

let longUrl = 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals'  axios .get(`https://api.shrtco.de/v2/shorten?url=${longUrl}`) .then((responseData) => {     console.log(responseData); }) .catch((err)=> {     alert('Error check your connectivity or link') }) 
Enter fullscreen mode Exit fullscreen mode

Here I am using template strings to add the URL to the get method so that we will be able to change it later.
As this api is free it will take some time to give the response (5 – 10sec), just wait until then. Here is a Codepen Example of a working API call.

After some time we will have the response in the form of JSON data, we will store it in a variable for later use or if a Error is caught we will simply alert 'Error check your connectivity or link'.

However we will not give the same link everytime or will change the JS everytime we have a new link, so we fetch the link from the input tag by value attribute.

let  longUrl  =  document.querySelector("#url-box").value; // we will also declare a variable for later storage of processed url let shortUrl;  
Enter fullscreen mode Exit fullscreen mode

Till now we have the full URL, working JSON request, and processed data.
Now we will get the main Information from that JSON data which is something like this:
Alt Text

The processed URL is full_short_link which is inside result which is inside of data.

Well, how to get this URL?
We will simple do resdata.data.result.full_short_link to get Processed link inside of then. Here resdata is response data from API.
for ex:

axios .get(`https://api.shrtco.de/v2/shorten?url=${longUrl}`)     .then((resdata) => {         //storing Processed URL in already declared variable         shortUrl  =  resdata.data.result.full_short_link;         console.log(shortUrl)         //check console for Processed URL or errors     })     .catch((err) => {         alert("Error check your connectivity or link");     }); 
Enter fullscreen mode Exit fullscreen mode

Now half of the work is Done! Congratulations.

Adding URL display box to HTML

What is left is we have to display it to screen which is not a big deal.

First of all Logic:
We will make a function which will create a element (a div tag) and store it in a variable then through .innerHtml property, We will pass this Markup (as a string) and pass variables (longUrl , shortUrl) using template strings:

` <div class="item">     <div class="long-url">         <div class="title font-1">             Long URL         </div>         <button id="long-url" class="font-2">             ${longUrl}           </button>     </div>     <div class="short-url">         <div class="title font-1">             Short URL         </div>           // providing shortUrl variable in value attribute for the copy function⏬         <button id="short-url" class="font-2" value='${shortUrl}' onclick='copyLink(this)'>             ${shortUrl}         </button>     </div> </div> ` 
Enter fullscreen mode Exit fullscreen mode

// compressed version (spaces and tabs removed) because JS will // give errors on 'tab' and 'enter'  <div class="item"><div class="long-url"><div class="title font-1">Long URL</div> <button id="long-url" class="font-2"> ${longUrl} </button></div><div class="short-url"><div class="title font-1">Short URL</div> <button id="short-url" class="font-2 hint--bottom" aria-label="Click link to Copy" onclick='copy(this)' value='${shortUrl}' onclick='copyLink(this)'>${shortUrl}</button></div></div> 
Enter fullscreen mode Exit fullscreen mode

and then finally this tag will append to the Parent link container. I know this is kinda complicated but this will help you get clear:

//Final working: function  addResult(longUrl, shortUrl) {     let parentEle = document.querySelector("#shortened-links");     let data = `<div class="item"><div class="long-url"><div class="title font-1">Long URL</div> <button id="long-url" class="font-2"> ${longUrl} </button></div><div class="short-url"><div class="title font-1">Short URL</div> <button id="short-url" class="font-2" value='${shortUrl}' onclick='copyLink(this)'>${shortUrl}</button></div></div>`;      let  newEle  =  document.createElement("div");     newEle.innerHTML  =  data;     parentEle.appendChild(newEle); } 
Enter fullscreen mode Exit fullscreen mode

We will pass longUrl and shortUrl as parameters.

Now we will pass this function in then method, which will execute when data is Fetched from API:

.then((resdata) => {     shortUrl  =  resdata.data.result.full_short_link;     addResult(longUrl, shortUrl); }) 
Enter fullscreen mode Exit fullscreen mode

and What will happen is this markup will be added to the Html when the data is fetched and as we have already styled their 'class' attributes in CSS, the markup will execute and a processed item will show up on the screen.

CopyLink function

The copyLink function will execute when the short Url box is clicked i.e.
Copy button
The function will be:

function  copyLink(tag){     let  text  =  tag.value;     // copy link to clipboard     navigator.clipboard.writeText(text); } 
Enter fullscreen mode Exit fullscreen mode

The parameter of this function will be the Tag and the argument will be this keyword. for ex:

// usage of this function: onclick='copyLink(this)' 
Enter fullscreen mode Exit fullscreen mode

this keyword will pass the full button tag through an argument so that we will later be able to use value property in CopyLink func.
Thats why i've used Button tags for displaying Output and added value attribute to shortUrl tag.
(you can use input tag also)

Now the Basic working is done and till now this much is done: here
I have added a Hint using Hint.css (just read the documentation it's pretty easy).

Now about Error Handling and Animations

Now it is upto you how much animations you want to add in this site.
As for error handling we can suppose certain situations in which a Error will occour like
'What if the input tag is empty and button is clicked' :

// we can do something like this: if (longUrl){     //if their is value in input tag then only Axios request is sent      axios.get().... }else{     alert('Enter some data first!!') } 
Enter fullscreen mode Exit fullscreen mode

Now If you want to do more customizations in this project that is totally upto you.

If you have any questions ask them in the Comment section and don't forget to leave a like If this post helped you.😊

A post by Devang. Hope it helps!

htmljavascripttutorialwebdev
  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 4k
  • Answers 0
  • Best Answers 0
  • Users 2k
  • Popular
  • Answers
  • Author

    ES6 - A beginners guide - Template Literals

    • 0 Answers
  • Author

    Understanding Higher Order Functions in JavaScript.

    • 0 Answers
  • Author

    Build a custom video chat app with Daily and Vue.js

    • 0 Answers

Top Members

Samantha Carter

Samantha Carter

  • 0 Questions
  • 20 Points
Begginer
Ella Lewis

Ella Lewis

  • 0 Questions
  • 20 Points
Begginer
Isaac Anderson

Isaac Anderson

  • 0 Questions
  • 20 Points
Begginer

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore, ask, and connect. Join our vibrant Q&A community today!

About Us

  • About Us
  • Contact Us
  • All Users

Legal Stuff

  • Terms of Use
  • Privacy Policy
  • Cookie Policy

Help

  • Knowledge Base
  • Support

Follow

© 2022 Querify Question. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.