uni-app是否有考虑在uni.request的回调中增加请求参数信息?

uni-app是否有考虑在uni.request的回调中增加请求参数信息?

在多域名接口请求中,回调参数中没有 url 地址或者参数,会导致 uni.addInterceptor 难以处理错误信息,请问此类问题,是否有相关的建议。

假设,我请求了两个域名的接口,返回了不同的数据:

uni.request({  
    url: 'http://aaa.com/article?token=1',  
    success(res) {  
        if (res.data.code === 1) {  
            console.log('请求成功,展示数据');  
        } else {  
            console.log('请求错误,显示错误');  
        }  
    },  
});  

uni.request({  
    url: 'http://bbb.com/article?token=2',  
    success(res) {  
        if (res.data.code === 0) {  
            console.log('请求成功,展示数据');  
        } else {  
            console.log('请求错误,显示错误');  
        }  
    },  
});

我设置了一个拦截器,期望实现下面的功能:

uni.addInterceptor('request', {  
    success(args) {  
        let url = '';  
        let ok_code = null;  
        if (url === 'aaa.com') {  
            ok_code = 1;  
        } else if (url === 'bbb.com') {  
            ok_code = 0;  
        }  

        if (res.data.code === ok_code) {  
            console.log('请求成功,展示数据');  
        } else {  
            console.log('请求错误,显示错误');  
        }  
    },  
});

如上所示,urlsuccess 方法中无法获取。

如果进一步优化,uni.addInterceptor 针对 request 可以设置多个拦截器,aaa.com 一个,bbb.com 一个,以达到最佳插件化开发的目的。


更多关于uni-app是否有考虑在uni.request的回调中增加请求参数信息?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

HBuilderX 3.7.13.20230411-alpha 已修复。

更多关于uni-app是否有考虑在uni.request的回调中增加请求参数信息?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


未搜到HBuilderX 3.7.13.20230411-alpha

遇到了同样的问题,我想在在success里获取请求参数,都获取不了,根本没办法做其他事情

方案1. 拦截器 success, fail, complete 增加第二个参数 params(本次调用的参数) 方案2. 允许在拦截器的 invoke 方法中再次调用 addInterceptor,removeInterceptor ,这样 invoke 中判断参数,动态添加不同的拦截器,但是需要自己处理重复执行时,不要add多次重复的拦截器

请问如何增加第二个参数 params

回复 zzz_01: 以上只是针对该需求的讨论,对应功能不一定支持 提供下你的 vue版本及目标平台,这边提供下方案1的临时解决方案

回复 DCloud_UNI_WZF: vue2, 百度及微信小程序平台

回复 DCloud_UNI_WZF: 第二种如何实现呢

回复 zzz_01: 下面提供的临时方案中也包括第二种的实现,注意:上述方案处于需求讨论阶段,不一定对外支持

回复 DCloud_UNI_WZF: 多谢,我尝试一下

vue2 临时解决方案: 微信小程序 替换 HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-mp-weixin/dist/index.js 为附件文件 百度小程序 替换 HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-mp-baidu/dist/index.js 为附件文件

我按照你的替换之后,确实能够通过params参数获取请求的信息,但是感觉不太现实呢,难道我一个小组成员的开发者都需要这么替换Hbuilder吗?有没有更实用的方法?

vue2 app该如何获取(已解决)

解决了,把请求重新封装下

目前uni.request的回调中确实不包含请求参数信息,这给多域名接口的拦截器处理带来不便。针对这个问题,我有以下建议:

  1. 当前解决方案:你可以在请求配置中增加自定义参数,通过闭包或全局变量传递:
const requestInfo = { url: 'http://aaa.com/article?token=1' };
uni.request({
    ...requestInfo,
    success(res) {
        res._config = requestInfo; // 手动附加配置信息
        // 处理逻辑
    }
});
  1. 拦截器优化:在addInterceptor中,可以通过修改请求配置来传递信息:
uni.addInterceptor('request', {
    invoke(args) {
        args._originalUrl = args.url; // 保存原始URL
        return args;
    },
    success(res) {
        const url = res._config?._originalUrl || '';
        // 根据URL处理不同逻辑
    }
});
回到顶部