4***@qq.com
4***@qq.com
  • 发布:2026-02-07 15:35
  • 更新:2026-02-07 16:40
  • 阅读:20

【报Bug】鸿蒙Next 使用 uni.addInterceptor('request ',请求拦截器不生效

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: MacOS 26.3 Beta (25D5112c)

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS 6.0.0

手机厂商: 模拟器

手机机型: Nova15

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: 3.0.0-4080720251210001

示例代码:
import type { CustomRequestOptions } from '@/http/types'  
import { useTokenStore } from '@/store'  
import { getEnvBaseUrl } from '@/utils'  
import { stringifyQuery } from './tools/queryString'  
import qs from 'qs'  

// 请求基准地址  
const baseUrl = getEnvBaseUrl()  

// 拦截器配置  
const httpInterceptor = {  
  // 拦截前触发  
  invoke(options: CustomRequestOptions) {  
    // 如果您使用了alova,则请把下面的代码放开注释  
    // alova 执行流程:alova beforeRequest --> 本拦截器 --> alova responded  
    // return options  
    console.log('invoke')  
    // 非 alova 请求,正常执行  
    // 接口请求支持通过 query 参数配置 queryString  
    if (options.method === 'GET') {  
      let data: string = ''  
      if ('data' in options) {  
        data = qs.stringify(options.data, { allowDots: true })  
        delete options.data  
      }  
      if ('query' in options) {  
        data = qs.stringify(options.query, { allowDots: true })  
        delete options.query  
      }  
      if (data) options.url = `${options.url}?${data}`  
    }  
    // 非 http 开头需拼接地址  
    if (!options.url.startsWith('http')) {  
      // #ifdef H5  
      if (JSON.parse(import.meta.env.VITE_APP_PROXY_ENABLE)) {  
        // 自动拼接代理前缀  
        options.url = import.meta.env.VITE_APP_PROXY_PREFIX + options.url  
      }  
      else {  
        options.url = baseUrl + options.url  
      }  
      // #endif  
      // 非H5正常拼接  
      // #ifndef H5  
      options.url = baseUrl + options.url  
      // #endif  
      // TIPS: 如果需要对接多个后端服务,也可以在这里处理,拼接成所需要的地址  
    }  
    // 1. 请求超时  
    options.timeout = 60000 // 60s  
    // 2. (可选)添加小程序端请求头标识  
    options.header = {  
      ...options.header,  
    }  
    // 3. 添加 token 请求头标识  
    const tokenStore = useTokenStore()  
    const token = tokenStore.updateNowTime().validToken  

    if (token) {  
      options.header.Authorization = `Bearer ${token}`  
    }  
    return options  
  },  
}  

export const requestInterceptor = {  
  install() {  
    // 拦截 request 请求  
    uni.addInterceptor('request', httpInterceptor)  
    // 拦截 uploadFile 文件上传  
    uni.addInterceptor('uploadFile', httpInterceptor)  
  },  
}  

操作步骤:

使用uni.request 发送请求

预期结果:

使用uni.request 发送请求,应先执行invoke()拦截方法

实际结果:

使用 uni.addInterceptor('request', httpInterceptor)拦截后,请求不执行invoke

bug描述:

【报Bug】鸿蒙Next 使用 uni.addInterceptor('request', httpInterceptor)
请求拦截器不生效,invoke()方法不执行。
改代码在h5 app-andorid经测试都正常。

2026-02-07 15:35 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

【官方评审结论】

  1. 反馈完整性

    • 标题、描述、代码、复现步骤、预期/实际结果、运行环境均已给出,信息基本完整。
    • 代码示例可直接粘贴运行,无需额外调整。
    • 复现步骤仅一句“使用 uni.request 发送请求”,略显简略,如能补充一个最小可运行页面(含按钮点击触发 uni.request 的完整 .vue 文件)会更利于官方快速复现。
  2. Bug 是否成立
    根据知识库:

    • 官方文档 明确标注 HarmonyOS 从 HBuilderX 4.23 起已支持 uni.addInterceptor('request', …)
    • 文档同时提示:仅拦截异步接口;若使用 uniCloud 的 callFunction/uploadFile 等内部也会走 uni.request,需要确保拦截器内不要误处理。
    • 目前知识库中未发现“HarmonyOS Next 不支持 request 拦截器”或“invoke 不执行”的已知限制。

因此,该现象属于异常,可认定为潜在 bug。

  1. 建议下一步
    • 请作者在 Ask 社区 按模板提交最小复现工程(包含 manifest.json、触发请求的页面、控制台打印截图)。
    • 复现工程请使用最新 Alpha(5.0+)或正式版 4.87 打包,确认仍有问题后贴出运行日志。
    • 临时绕过:若急需拦截功能,可先改用封装请求工具(如 axios/flyio)并在业务层统一处理,待官方修复后再切回拦截器方案。
内容为 AI 生成,仅供参考
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

关联此问题 https://issues.dcloud.net.cn/pages/issues/detail?id=26158
下个 alpha 会修复

要回复问题请先登录注册