Axios interceptors let you catch and change requests or responses before they reach your app. This helps you add common tasks like adding tokens or handling errors in one place.
Axios interceptors in Vue
axios.interceptors.request.use(function (config) { // modify config before request is sent return config; }, function (error) { // handle request error return Promise.reject(error); }); axios.interceptors.response.use(function (response) { // modify response data return response; }, function (error) { // handle response error return Promise.reject(error); });
The use method takes two functions: one for success and one for error.
Always return the config or response in the success function to continue the flow.
axios.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer mytoken';
return config;
});axios.interceptors.response.use(response => {
return response.data;
});axios.interceptors.response.use(null, error => { alert('Request failed!'); return Promise.reject(error); });
This Vue component uses Axios interceptors to add an authorization header to every request and to catch errors globally. When you click the button, it fetches data and shows loading, data, or error messages.
<template>
<div>
<button @click="fetchData">Fetch Data</button>
<p v-if="loading">Loading...</p>
<pre v-if="data">{{ data }}</pre>
<p v-if="error" style="color: red">{{ error }}</p>
</div>
</template>
<script setup>
import { ref } from 'vue';
import axios from 'axios';
const data = ref(null);
const error = ref(null);
const loading = ref(false);
// Add request interceptor to add a fake token
axios.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer fake-token-123';
return config;
});
// Add response interceptor to handle errors
axios.interceptors.response.use(
response => response,
err => {
error.value = 'Failed to fetch data';
loading.value = false;
return Promise.reject(err);
}
);
async function fetchData() {
loading.value = true;
error.value = null;
data.value = null;
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/posts/1');
data.value = JSON.stringify(response.data, null, 2);
} catch {
// error handled by interceptor
} finally {
loading.value = false;
}
}
</script>Interceptors run for every request or response unless removed.
You can eject interceptors if you want to stop them later.
Be careful to handle errors in interceptors to avoid unhandled promise rejections.
Axios interceptors let you change requests or responses before your app sees them.
Use them to add headers, handle errors, or modify data globally.
They help keep your code clean by centralizing common tasks.
Practice
Solution
Step 1: Understand Axios interceptors role
Axios interceptors allow you to intercept and modify requests or responses globally before they reach your Vue components.Step 2: Compare options
Options B, C, and D describe unrelated or incorrect uses of Axios interceptors.Final Answer:
To modify requests or responses globally before they reach your components -> Option AQuick Check:
Interceptor purpose = Modify requests/responses globally [OK]
- Thinking interceptors create new Axios instances
- Confusing interceptors with Vue lifecycle hooks
- Assuming interceptors update component state automatically
Solution
Step 1: Recall Axios interceptor syntax
The correct syntax to add a request interceptor is axios.interceptors.request.use(callback).Step 2: Identify correct option
Only axios.interceptors.request.use(config => { return config }) matches the correct syntax; others have incorrect property order or method calls.Final Answer:
axios.interceptors.request.use(config => { return config }) -> Option CQuick Check:
Correct syntax = axios.interceptors.request.use [OK]
- Swapping 'request' and 'interceptors' order
- Using 'use' before 'interceptors'
- Missing the return of config in the callback
axios.interceptors.response.use(response => {
response.data.modified = true;
return response;
});
const result = await axios.get('/api/data');
console.log(result.data.modified);What will be logged to the console?
Solution
Step 1: Analyze the response interceptor
The interceptor adds a property 'modified' with value true to response.data before returning it.Step 2: Understand the logged value
After the GET request, result.data.modified will be true because the interceptor modified it.Final Answer:
true -> Option BQuick Check:
Interceptor modifies data = logged true [OK]
- Assuming interceptor does not modify response
- Expecting undefined because property was added dynamically
- Thinking an error occurs due to property addition
axios.interceptors.request.use(config => {
config.headers['Authorization'] = 'Bearer token';
});Solution
Step 1: Check interceptor callback requirements
Axios interceptors must return the config object after modifying it to continue the request chain.Step 2: Identify missing return
The code modifies headers but does not return config, causing the request to hang or fail.Final Answer:
Missing return of config in the interceptor callback -> Option AQuick Check:
Always return config in request interceptor [OK]
- Forgetting to return config or response
- Setting headers on response instead of request config
- Misplacing interceptor on wrong Axios property
Solution
Step 1: Understand 401 error handling
401 Unauthorized errors come from server responses, so handling must be in a response interceptor.Step 2: Choose correct handling method
Use a response interceptor to check error response status and redirect to login correctly uses a response interceptor to detect 401 status and redirect user to login page.Step 3: Eliminate incorrect options
Retrying infinitely causes loops; using a request interceptor cannot handle response errors like 401; adding a 401 status header in the request is invalid.Final Answer:
Use a response interceptor to check error response status and redirect to login -> Option DQuick Check:
401 errors handled in response interceptor [OK]
- Trying to handle response errors in request interceptors
- Retrying requests infinitely on 401 errors
- Adding fake status headers in requests
Ready to prove it?
Pass the test and this pattern moves unknown
