vue3加ts对axios二次封装
时间: 2025-03-06 19:27:58 浏览: 41
### Vue 3 中 TypeScript 对 Axios 进行二次封装
#### 创建 Axios 实例并配置默认选项
为了实现更灵活和可维护的 HTTP 请求,在 `Vue 3` 和 `TypeScript` 的环境中,可以创建一个自定义的 Axios 实例来设置全局的基础 URL、超时时间以及其他必要的配置项。
```typescript
// src/api/index.ts
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
const service: AxiosInstance = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // 设置基础URL[^1]
timeout: 5000 // 超时时长
});
```
#### 添加请求与响应拦截器
通过添加请求和响应拦截器可以在发送请求前或接收服务器返回的数据之后执行一些逻辑操作。这有助于集中管理和处理跨域凭证、身份验证令牌以及异常情况等通用需求。
```typescript
service.interceptors.request.use(
(config: AxiosRequestConfig) => {
const token = localStorage.getItem('token');
if (token && config.headers) {
config.headers['Authorization'] = `Bearer ${token}`;
}
return config;
},
error => Promise.reject(error)
);
service.interceptors.response.use(
response => response.data,
error => {
console.error(`Error occurred during request:`, error);
throw new Error(error.message || "Network Error");
}
)[^3];
```
#### 定义 API 接口函数
对于特定业务场景下的接口调用,建议按照模块化的方式组织代码结构,比如按功能划分成不同的文件夹如 user、article 等,并在这些目录下分别编写对应的 api 函数用于发起网络请求。
```typescript
// src/api/user.ts
export function login(data: LoginFormData): Promise<any> {
return service.post('/auth/login', data);
}
interface LoginFormData {
username: string;
password: string;
}
```
#### 使用封装后的服务实例发起请求
当完成了上述准备工作后就可以很方便地在整个应用里使用这个经过增强过的 http client 来获取远程资源了。
```javascript
// components/Login.vue 或其他组件内
import { ref } from 'vue';
import { login as loginUser } from '@/api/user';
async function handleLogin() {
try {
const result = await loginUser({username:'admin',password:'123'});
console.log(result);
} catch(err){
alert("登录失败!");
}
}
```
阅读全文
相关推荐


















