引言在Vue3项目中,Axios是一个非常流行的HTTP客户端,用于发送异步HTTP请求。正确封装API调用对于保持代码的可维护性和可扩展性至关重要。本文将深入探讨Vue3中使用Axios封装API调...
在Vue3项目中,Axios是一个非常流行的HTTP客户端,用于发送异步HTTP请求。正确封装API调用对于保持代码的可维护性和可扩展性至关重要。本文将深入探讨Vue3中使用Axios封装API调用的最佳实践与技巧。
在开始封装API调用之前,首先需要配置Axios实例。以下是一些基本的配置项:
import axios from 'axios';
const api = axios.create({ baseURL: 'https://api.example.com', // 基础URL timeout: 10000, // 请求超时时间 headers: { 'Content-Type': 'application/json', },
});为了提高代码的可读性和可维护性,我们可以将API调用封装成独立的函数。以下是一个简单的封装示例:
// 封装登录API
export function login(username, password) { return api.post('/login', { username, password });
}
// 封装获取用户信息API
export function getUserInfo(userId) { return api.get(`/users/${userId}`);
}请求拦截器可以用于在发送请求之前修改请求配置,或者添加一些通用的请求头。以下是一个添加请求头的示例:
api.interceptors.request.use( (config) => { // 添加token到请求头 config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`; return config; }, (error) => { return Promise.reject(error); }
);响应拦截器可以用于处理响应数据,例如检查响应状态码或解析JSON。以下是一个处理响应状态的示例:
api.interceptors.response.use( (response) => { // 处理响应数据 return response; }, (error) => { // 处理错误响应 if (error.response) { // 请求已发出,但服务器响应的状态码不在2xx范围内 console.error('Error:', error.response.status, error.response.data); } else if (error.request) { // 请求已发出,但没有收到响应 console.error('Error:', error.request); } else { // 在设置请求时触发了某些问题 console.error('Error:', error.message); } return Promise.reject(error); }
);在封装API调用时,错误处理非常重要。以下是一些处理错误的技巧:
try { const response = await getUserInfo(userId); // 处理响应数据
} catch (error) { // 处理错误 console.error('Error:', error);
}以下是一个使用Axios封装API调用的完整示例:
import axios from 'axios';
const api = axios.create({ baseURL: 'https://api.example.com', timeout: 10000, headers: { 'Content-Type': 'application/json', },
});
// 封装API调用
export function login(username, password) { return api.post('/login', { username, password });
}
export function getUserInfo(userId) { return api.get(`/users/${userId}`);
}
// 使用请求拦截器
api.interceptors.request.use( (config) => { config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`; return config; }, (error) => { return Promise.reject(error); }
);
// 使用响应拦截器
api.interceptors.response.use( (response) => { return response; }, (error) => { if (error.response) { console.error('Error:', error.response.status, error.response.data); } else if (error.request) { console.error('Error:', error.request); } else { console.error('Error:', error.message); } return Promise.reject(error); }
);在Vue3项目中,使用Axios封装API调用是提高代码可维护性和可扩展性的关键。通过遵循上述最佳实践和技巧,你可以创建出更加健壮和易于维护的API调用代码。