Axios is an open-source library for making asynchronous HTTP requests to REST endpoints in the browser and Node.js. It is a promise-based HTTP client that can be used in plain JavaScript and in modern JavaScript frameworks like React, Angular and Vue.js, etc.

In this tutorial, we will be using Axios in a JavaScript and HTML5 project. Let's create a new HTML5 project:

# create and switch to new directory
$ mkdir axios-js && cd axios-js

# create files
$ touch index.html script.js

# open the project in VS Code
$ code .

Installation

Adding Axios to the HTML5 project is easy. You can use the npm package manager or Content Delivery Network (CDN). If you prefer to use the npm package manager, run the following command in your terminal:

$ npm install axios --save

It will download the library in the node_modules folder from where you can add it to your project:

<script src="./node_modules/axios/dist/axios.min.js"></script>

The easiest way to include Axios is by using an external CDN:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

User Interface

Let us update our index.html file to display a list of users:

index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Axios in JavaScript</title>
    </head>
    <body>
        <div>
            <h1>Users</h1>
            <ul></ul>
        </div>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script src="script.js"></script>
    </body>
</html>

For running the project, we will be using http-server - a simple, zero-configuration command-line HTTP server:

$ http-server -p 3000

Now you can visit http://localhost:3000 to view your project.

GET Request

Let us create a new function in the script.js file to fetch a list of users using the GET request. We will use Reqres REST API for all our examples.

script.js

const fetchUsers = () => {
  axios
    .get('https://reqres.in/api/users')
    .then(response => {
      const users = response.data.data
      console.log(`GET list users`, users)
    })
    .catch(error => console.error(error))
}

fetchUsers()

If you have used jQuery before, understanding the axios.get() function is easy. We just pass the endpoint URL as a parameter to this method. The method returns a promise, allowing us to use then() and catch() methods to handle the result.

When the promise is resolved successfully, you will get a response object back. This object has information about the response, such as headers, data, config, status, and even a complete request object.

Now let us extend our script.js file and add a new function that parses the users object and add it to DOM:

script.js

const createLi = user => {
  const li = document.createElement('li')
  // add user details to `li`
  li.textContent = `${user.id}: ${user.first_name} ${user.last_name}`
  return li
}

const appendToDOM = users => {
  const ul = document.querySelector('ul')
  //iterate over all users
  users.map(user => {
    ul.appendChild(createLi(user))
  })
}

const fetchUsers = () => {
  axios
    .get('https://reqres.in/api/users')
    .then(response => {
      const users = response.data.data
      console.log(`GET list users`, users)
      // append to DOM
      appendToDOM(users)
    })
    .catch(error => console.error(error))
}

fetchUsers()

POST Request

We can add a new user to our REST API with the axios.post() method. Just add a new function createUsers() inside of script.js:

const createUser = user => {
  axios
    .post('https://reqres.in/api/users', user)
    .then(response => {
      const addedUser = response.data
      console.log(`POST: user is added`, addedUser)
      // append to DOM
      appendToDOM([addedUser])
    })
    .catch(error => console.error(error))
}

To create a new user, you need to add a <form> inside the index.html file to capture user information:

<div id="create-user">
    <h1>Create User</h1>
    <form>
        <input type="text" id="first_name" placeholder="Enter First Name">
        <input type="text"  id="last_name" placeholder="Enter Last Name">
        <button type="submit">Add User</button>
    </form>
</div>

Now add an event listener for form submission to create a new user:

const form = document.querySelector('form')

const formEvent = form.addEventListener('submit', event => {
  event.preventDefault()

  const first_name = document.querySelector('#first_name').value
  const last_name = document.querySelector('#last_name').value

  const user = { first_name, last_name }
  createUser(user)
})

DELETE Request

Axios provides axios.delete() method to make a DELETE request. Let's add the delete feature to our users' list. First of all, create a new function deleteUser() inside of script.js:

const deleteUser = (elem, id) => {
  axios
    .delete(`https://reqres.in/api/users/${id}`)
    .then(response => {
      console.log(`DELETE: user is removed`, id)
      // remove elem from DOM
      elem.remove()
    })
    .catch(error => console.error(error))
}

Now update the createLi() method to attach an onclick event which handles the removal of the user when clicked:

const createLi = user => {
  const li = document.createElement('li')
  // add user details to `li`
  li.textContent = `${user.id}: ${user.first_name} ${user.last_name}`

  // attach onclick event
  li.onclick = e => deleteUser(li, user.id)

  return li
}

Source code: Download the complete source code from GitHub available under MIT license.

Summary

Axios is a simple-to-use HTTP client library that allows us to easily send asynchronous HTTP requests to REST endpoints and perform CRUD operations. If you want to learn more about Axios, check out the guides on Axios in Node.js and Node.js HTTP client libraries.

✌️ Like this article? Follow me on Twitter and LinkedIn. You can also subscribe to RSS Feed.