sajad torkamani

Let’s suppose you want to deal with 401 Unauthorized status codes by redirecting the user to the login screen. You can use an approach like this:

import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from 'axios'
import authService from './services/authService'

const apiClient: AxiosInstance = axios.create({
  baseURL: 'http://localhost:8080',

apiClient.interceptors.response.use(undefined, handleError)

function addAuthorizationHeader(
  config: AxiosRequestConfig
): AxiosRequestConfig {
  if (authService.isAuthenticated()) {
    config.headers['Authorization'] = `Bearer ${authService.getToken()}`

  return config

function handleError(error: AxiosError) {
  const response = error.response?.data

  // Wasn't able to get any response at all. Perhaps because of network errors.
  if (!response) {
    return Promise.reject(error)

  if (
    response.code === 'UNAUTHENTICATED' &&
    response.message === 'Invalid token'
  ) {
    return authService.logout()

  return Promise.reject(error)

export default apiClient