Skip to content

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无前缀实例
mockRequestMock 数据实例

拦截器

请求拦截器自动添加 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)