uni-app addInterceptor('callFunction') 拦截器无法监听云对象

uni-app addInterceptor(‘callFunction’) 拦截器无法监听云对象

信息类型 详细信息
产品分类 uniCloud/App

操作步骤:

  • 客户端:
    1. uniCloud.addInterceptor(‘callFunction’, {})
    2. 调用任意云对象

预期结果:

  • 可以拦截云对象的 invoke、success、fail、complete

实际结果:

  • 无法拦截监听云对象的调用

bug描述:

云对象是对云函数的封装,客户端调用云对象,实际上也是调用uniCloud.callFunction。但是实际上用 uniCloud.addInterceptor('callFunction', {}) 添加拦截器,无法拦截云对象。

而服务端有些错误码,需要客户端拦截进行统一处理。而无法拦截云对象,会造成麻烦,恳请官方修复此bug,或实现这个需求。

4 回复

不好意思,开了重复的帖子,不知道怎么删帖。。。
已得到回复,见附件
建议用 uniCloud.addInterceptor 这种方式注册拦截器,方便管理代码。或者跟云函数用同一个拦截器也行


我也遇到这个问题,HBuilderX 3.4.3版本是可以用 uniCloud.addInterceptor(‘callFunction’, {}) 拦截云函数和云对象的,升级到HBuilderX 3.5.x之后就拦截不到云对象。 因为刚好uni-id也从3.x升级到4.x,一直以为可能是客户端的uni-id版本问题,hx3.5和hx3.4alpha长期共存…今天研究了下发现是因为拦截器没有生效。
目前: HBuilderX 3.4.13已新增uniCloud.onResponse监听云端响应:https://uniapp.dcloud.net.cn/uniCloud/client-sdk.html#on-response HBuilderX 3.5.0已新增uniIdRouter自动路由:https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#uni-id-router HBuilderX 3.5.5已新增uniCloud.interceptObject云对象拦截器:https://uniapp.dcloud.net.cn/uniCloud/client-sdk.html#intercept-object
改改代码,升级HX!

在拦截器上线初期能拦截云对象请求是错误的表现。后来进行了调整

在 UniApp 中,addInterceptor('callFunction') 是用于拦截云函数调用的方法。然而,云对象(Cloud Object)是另一种与云函数不同的调用方式,因此 addInterceptor('callFunction') 无法直接监听云对象的调用。

云对象与云函数的区别

  • 云函数:通过 uniCloud.callFunction 调用的函数。
  • 云对象:通过 uniCloud.importObject 导入的对象,调用其方法时,实际上是调用了云端的云函数,但调用方式与云函数不同。

解决方案

如果你需要拦截云对象的调用,可以考虑以下方法:

  1. 在云对象内部进行拦截: 你可以在云对象的方法内部添加拦截逻辑。例如,在云对象的每个方法中,手动添加日志记录或拦截逻辑。

    // 云对象示例
    module.exports = {
        async myMethod(param) {
            // 拦截逻辑
            console.log('拦截云对象方法调用:', param);
    
            // 业务逻辑
            return { result: 'success' };
        }
    };
  2. 在客户端手动封装云对象调用: 在客户端调用云对象时,手动封装调用逻辑,并在调用前后添加拦截逻辑。

    const myObject = uniCloud.importObject('myObject');
    
    async function callMyObjectMethod(param) {
        // 调用前拦截
        console.log('调用云对象方法前:', param);
    
        // 调用云对象方法
        const result = await myObject.myMethod(param);
    
        // 调用后拦截
        console.log('调用云对象方法后:', result);
    
        return result;
    }
  3. 使用云函数的拦截器: 如果你在云对象中调用了云函数,可以在云函数中使用 addInterceptor('callFunction') 来拦截这些调用。

    uniCloud.addInterceptor('callFunction', {
        invoke: function(args) {
            console.log('拦截云函数调用:', args);
        },
        success: function(res) {
            console.log('云函数调用成功:', res);
        },
        fail: function(err) {
            console.log('云函数调用失败:', err);
        }
    });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!