HTTP 请求封装
基于 Axios 封装的 HTTP 请求工具,支持拦截器、错误处理。
基础用法
js
import { request } from '@/utils/http'
// GET 请求
const res = await request.get('/api/user/list', {
params: { page: 1, size: 10 }
})
// POST 请求
const res = await request.post('/api/user', {
name: '张三',
age: 25
})
// PUT 请求
const res = await request.put('/api/user/1', data)
// DELETE 请求
const res = await request.delete('/api/user/1')完整配置
js
const res = await request({
url: '/api/user',
method: 'post',
data: { name: '张三' },
params: { type: 1 }, // URL 参数
headers: {}, // 自定义请求头
timeout: 10000 // 超时时间
})创建自定义实例
js
import { createAxios } from '@/utils/http'
const customRequest = createAxios({
baseURL: 'https://api.example.com',
timeout: 5000
})内置实例
| 实例 | 说明 |
|---|---|
| request | 默认实例,带 VITE_REQUEST_PREFIX 前缀 |
| noPrefixRequest | 无前缀实例 |
| mockRequest | Mock 数据实例 |
拦截器
请求拦截器自动添加 Token:
js
// 自动添加 Authorization 头
headers: {
Authorization: 'Bearer xxx'
}响应拦截器自动处理:
- 统一错误提示
- Token 过期自动刷新
- 请求加密/解密
错误处理
js
try {
const res = await request.get('/api/user')
} catch (error) {
if (error.response) {
// 服务器返回错误
console.log(error.response.status)
console.log(error.response.data)
} else if (error.request) {
// 请求发送但无响应
console.log('网络错误')
} else {
// 请求配置错误
console.log(error.message)
}
}加密请求
js
import { postEncrypt } from '@/utils/encrypt-request'
// 使用加密 POST 请求
const res = await postEncrypt('/api/user', data)