You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nuxt 3的useFetch中获取响应头?

如何在Nuxt 3的useFetch中获取响应头?

嘿,我之前也从Nuxt2+Axios迁移到Nuxt3+useFetch,刚好碰到过这个问题,给你捋捋怎么实现~

useFetch默认返回的data、pending这些里确实没有直接暴露响应头,但我们可以通过它的**onResponse钩子**来拿到完整的响应对象,包括headers信息,刚好能替代你原来Axios里的逻辑。

直接给你上迁移后的代码示例,你可以照着改:

// 先定义两个ref用来存文件名和blob,方便组件里使用
const fileInfo = ref({
  filename: '',
  blob: null
})

const { data, pending, error, refresh } = useFetch(url, {
  responseType: 'arraybuffer', // 和原来Axios的配置一致
  onResponse: ({ response }) => {
    // 从响应头里提取文件名
    const contentDisposition = response.headers.get('content-disposition')
    fileInfo.value.filename = contentDisposition?.match(/filename="([\w\d_\-.]*)"/)?.[1] || ''
    
    // 创建Blob对象
    fileInfo.value.blob = new Blob([response._data], {
      type: response.headers.get('content-type') || response._data.type
    })
  }
})

这里要注意几个点:

  • response._data就是我们要的arraybuffer格式的响应体,对应原来Axios里的response.data
  • 用response.headers.get('xxx')来获取指定响应头,这是标准Fetch API的写法
  • 如果是跨域请求,要确保服务器配置了Access-Control-Expose-Headers,把content-disposition加进去,不然前端拿不到这个自定义头,这个和Axios时代的限制是一样的

这样就能完美复刻你原来Axios里的逻辑啦,试试吧!

备注:内容来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:59:29