在 Vue.js 项目中封装 Axios 是一个常见的做法,这样做可以简化请求逻辑、统一错误处理、简化 API 调用等。
1. 安装 Axios
确保你已经在项目中安装了 Axios:
Bash
深色版本
npm install axios
2. 创建封装模块
创建一个 JavaScript 文件,比如 axios.js,并在其中封装 Axios:
Javascript
深色版本
import axios from 'axios';
// 创建 axios 实例
const service = axios.create({
baseURL: process.env.BASE_API || 'http://localhost:3000/api', // api base_url
timeout: 10000 // 请求超时时间
});
// 请求拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做些什么,例如添加 token 到请求头
if (config.headers) {
config.headers.Authorization = localStorage.getItem('token') || '';
}
return config;
},
error => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
response => {
const res = response.data;
// 对响应数据做点什么
if (res.code !== 200) {
// 错误提示
Message({
message: res.message,
type: 'error',
duration: 5 * 1000
});
// 500 内部服务器错误
return Promise.reject(new Error(res.message));
} else {
return res;
}
},
error => {
// 对响应错误做点什么(网络问题)
console.log('err' + error); // eslint-disable-line
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
});
return Promise.reject(error);
}
);
export default service;
3. 在 Vue 项目中使用封装的 Axios
在你的 Vue 组件中,你可以导入封装好的 Axios 并使用它来发起请求。
示例组件 SomeComponent.vue
Javascript
深色版本
<template>
<div>
<button @click="fetchData">Fetch Data</button>
</div>
</template>
<script>
import axios from '@/utils/axios'; // 假设这是你封装的 axios 文件路径
export default {
methods: {
fetchData() {
axios.get('/some-endpoint')
.then(response => {
console.log(response);
})
.catch(error => {
console.error(error);
});
}
}
};
</script>
注意事项
- 环境变量:在
axios.create()中使用了process.env.BASE_API,这允许你在不同的环境(如开发、测试、生产)下使用不同的基础 URL。 - 错误处理:在响应拦截器中添加了错误处理逻辑,可以根据返回的状态码做出相应的提示或动作。
- 请求头:在请求拦截器中添加了
Authorization头,这样每次请求都会带上用户的 token(假设你使用了 token 进行身份验证)。
这个封装的例子展示了如何设置 Axios 的基本配置,如何添加请求和响应拦截器来统一处理请求和响应,以及如何在 Vue 组件中使用封装后的 Axios。