Skip to content

网络请求

模块提供了一个组合式函数 useApiClient,它是对 Nuxt 内置 $fetch 的一层轻量级封装,自动集成了配置文件中的 baseURLheaders 等选项。

基础用法

vue
<script setup lang="ts">
const { get, post, put, del, request } = useApiClient()

// GET 请求
const fetchUser = async () => {
  const user = await get('/users/1')
}

// POST 请求
const createUser = async () => {
  await post('/users', {
    body: { name: 'Nuxt' }
  })
}
</script>

进阶用法

拦截器与自定义 Header

你可以像使用 $fetch 一样使用拦截器,这对于添加认证 Token 或处理全局错误非常有用。

vue
<script setup lang="ts">
const { get } = useApiClient()

const fetchWithInterceptor = async () => {
  const data = await get('/profile', {
    // 覆盖/添加 Header
    headers: {
      'Authorization': 'Bearer my-token'
    },
    
    // 请求拦截器
    onRequest({ options }) {
      console.log('正在发送请求...')
      // 动态添加 Header
      options.headers.set('X-Timestamp', Date.now().toString())
    },
    
    // 响应拦截器
    onResponse({ response }) {
      console.log('收到响应:', response.status)
    },
    
    // 错误处理
    onResponseError({ response }) {
      console.error('API 错误:', response._data)
    }
  })
}
</script>

错误处理

useApiClient 会抛出一个归一化的错误对象,方便统一处理。

typescript
try {
  await get('/error-api')
} catch (error) {
  // error 对象结构
  console.log(error.statusCode) // HTTP 状态码
  console.log(error.message)    // 错误消息
  console.log(error.data)       // 响应数据
}

Released under the MIT License.