uni-app SSEChannel调试报错not found collection

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app SSEChannel调试报错not found collection
在调试uniCloud.SSEChannel过程中(已开通unipush2)遇到报错:{"code":"FUNCTION_EXCUTE_ERROR","message":"not found collection"}

求大佬解答。

客户端代码:

async function testSSE() {  
  const sseChannel = new uniCloud.SSEChannel(); // 创建消息通道  
  console.log(sseChannel);  
  await sseChannel.open(); // 等待通道开启  
  sseChannel.on("message", (message) => {  
    // 监听message事件  
    console.log("on message", message);  
    list.value.push(JSON.stringify(e.data));  
  });  
  sseChannel.on("end", (message) => {  
    // 监听end事件,如果云端执行end时传了message,会在客户端end事件内收到传递的消息  
    console.log("on end", message);  
    sseChannel.close();  
  });  

  const myTestObj = uniCloud.importObject("myTest");  
  await myTestObj  
    .testSSE({  
      messages: "123",  
      sseChannel, // 调用云对象时传入通道对象  
    })  
    .then((res) => {  
      console.log(res);  
    })  
    .catch((err) => {  
      console.log(err);  
    });  
}

云对象代码:

async testSSE({  
        messages,  
        sseChannel,  
    }) {  
        return new Promise(async (resolve, reject) => {  
            try {  
                console.log(messages, sseChannel);  
                const channel = uniCloud.deserializeSSEChannel(sseChannel);  
                console.log(channel);  
                await channel.write({  
                    a: 1,  
                });  
                await channel.write({  
                    a: 2,  
                });  
                await channel.write({  
                    a: 3,  
                });  
                await channel.write({  
                    a: 4,  
                });  

                console.log(res);  
                await channel.end({  
                    a: 5,  
                });  
                resolve({  
                    errCode: 0,  
                });  
            } catch (e) {  
                reject(e);  
            }  
        });  
    },

云对象配置信息:

名称 依赖 扩展
myTest {} {“uni-cloud-jql”:{},“uni-cloud-push”:{}}


2 回复

手动创建一下集合试下呢


在处理uni-app中的SSEChannel(Server-Sent Events Channel)调试报错“not found collection”问题时,首先需要明确的是,SSE本身是一种从服务器向客户端推送实时更新的技术,通常用于实现类似WebSocket的功能,但更轻量级,因为它仅支持单向通信(服务器到客户端)。在uni-app中,SSE通常通过uni.createSSEChannel API来创建和管理。

报错“not found collection”通常与数据库操作相关,但在SSE的上下文中,这个错误可能是误报或者是由其他代码部分引发的。为了排查和解决此问题,我们可以从以下几个方面入手:

  1. 确认SSEChannel的正确使用: 确保SSEChannel被正确创建和使用。以下是一个基本的SSEChannel使用示例:

    const sseChannel = uni.createSSEChannel({
        url: 'https://example.com/sse-endpoint', // 确保URL正确
        method: 'GET',
        headers: {
            'Content-Type': 'text/plain'
        },
        onMessage: function(res) {
            console.log('Received message:', res.data);
        },
        onError: function(err) {
            console.error('SSE error:', err);
        },
        onClose: function() {
            console.log('SSE connection closed');
        }
    });
    
    sseChannel.start();
    
  2. 检查数据库操作: 由于报错信息中提到了“collection”,需要检查项目中是否有数据库操作代码错误地触发了此错误。在uni-app中,通常使用uniCloud的数据库API进行集合操作。确保所有数据库操作都针对正确的集合,并且API调用符合规范。例如:

    const db = uniCloud.database();
    db.collection('your_collection_name').get().then(res => {
        console.log(res.result);
    }).catch(err => {
        console.error('Database error:', err);
    });
    

    如果上述代码中的your_collection_name不正确,将会导致“not found collection”错误。

  3. 调试和日志: 增加日志输出,特别是在SSE和数据库操作的回调函数中,以帮助定位问题发生的具体位置。

  4. 检查网络请求: 使用开发者工具的网络面板检查SSE请求的状态和响应,确保服务器正确响应SSE请求。

  5. 查阅文档和社区: 查阅uni-app和uniCloud的官方文档,以及社区论坛和问答网站,看看是否有其他开发者遇到并解决了类似问题。

通过上述步骤,你应该能够定位并解决“not found collection”错误,或者至少确定错误是否与SSEChannel的使用直接相关。

回到顶部