Skip to content

接口请求

了解如何在项目中进行 API 接口请求。

Axios 封装

项目使用 Axios 进行 HTTP 请求,已在 src/utils/request.ts 中封装。

基本用法

typescript
import request from '@/utils/request'

// GET 请求
export function getUserList(params) {
  return request({
    url: '/api/v1/users',
    method: 'get',
    params
  })
}

// POST 请求
export function addUser(data) {
  return request({
    url: '/api/v1/users',
    method: 'post',
    data
  })
}

请求拦截器

自动添加 Token:

typescript
request.interceptors.request.use(
  (config) => {
    const token = getToken()
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  }
)

响应拦截器

统一处理响应:

typescript
request.interceptors.response.use(
  (response) => {
    const { code, data, msg } = response.data
    if (code === '00000') {
      return data
    } else {
      ElMessage.error(msg)
      return Promise.reject(new Error(msg))
    }
  }
)

API 管理

src/api 目录按模块管理:

api/
├── system/
│   ├── user-api.ts
│   ├── role-api.ts
│   └── menu-api.ts
└── ...

使用示例

vue
<script setup lang="ts">
import UserAPI from '@/api/system/user-api'

const loading = ref(false)
const userList = ref([])

async function fetchUsers() {
  loading.value = true
  try {
    const data = await UserAPI.getUserList({ pageNum: 1 })
    userList.value = data.list
  } catch (error) {
    console.error(error)
  } finally {
    loading.value = false
  }
}

onMounted(() => {
  fetchUsers()
})
</script>

相关链接

基于 MIT 许可发布