uni-app clientDB前端API同时发送多条数据库请求multi-send接口报错

uni-app clientDB前端API同时发送多条数据库请求multi-send接口报错

示例代码:

onLoad:async function (e) {  
    const bannerQuery = db.collection('opendb-banner').getTemp() // 这里使用getTemp不直接发送get请求,等到multiSend时再发送  
    const noticeQuery = db.collection('config').getTemp()  
    const res = await db.multiSend(bannerQuery,noticeQuery)  
    console.log(res);  
}

操作步骤:

onLoad:async function (e) {  
    const bannerQuery = db.collection('opendb-banner').getTemp() // 这里使用getTemp不直接发送get请求,等到multiSend时再发送  
    const noticeQuery = db.collection('config').getTemp()  
    const res = await db.multiSend(bannerQuery,noticeQuery)  
    console.log(res);  
}

预期结果:

// 上述请求返回以下结构  
res = {  
  code: 0, // 请求整体执行错误码,注意如果多条查询执行失败,这里的code依然是0,只有出现网络错误等问题时这里才会出现错误  
  message: '', // 错误信息  
  dataList: [{  
    code: 0, // bannerQuery 对应的错误码  
    message: '', // bannerQuery 对应的错误信息  
    data: [] // bannerQuery 查询到的数据  
  }, {  
    code: 0, // noticeQuery 对应的错误码  
    message: '', // noticeQuery 对应的错误信息  
    data: [] // noticeQuery 查询到的数据  
  }]  
}

实际结果:

11:57:01.700 [本地调试]"收到clientDB multiSend请求:表名:opendb-banner;表名:config"   
11:57:01.729 [本地调试]TypeError: Cannot read property 'split' of undefined  
11:57:01.729 [本地调试]    at C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\uni-curd\index.js:1:15114  
11:57:01.741 [本地调试]    at Array.forEach (<anonymous>)  
11:57:01.742 [本地调试]    at getUsedActionList (C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\uni-curd\index.js:1:15078)  
11:57:01.754 [本地调试]    at t.exports (C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\uni-curd\index.js:1:206953)  
11:57:01.754 [本地调试]    at Object.exports.main (C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\index.js:1:77)  
11:57:01.764 [本地调试]    at u (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:1548)  
11:57:01.764 [本地调试]    at h (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:2443)  
11:57:01.777 [本地调试]    at uniCloudSecret (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:7098)  
11:57:01.788 [本地调试]    at module.exports (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:7122)  
11:57:01.797 [本地调试]    at module.exports.exec (C:\D\HBuilderX\plugins\unicloud\server\controller\cloudfunctions.js:1:1416)

bug描述:

平台 版本 预览版本
阿里云服务空间 HBuilderX 3.2.12.20211029 H5,APP-NVUE


https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=multi-send
按照这个文档说明写的demo都跑不起来。

```javascript
onLoad:async function (e) {  
    const bannerQuery = db.collection('opendb-banner').getTemp() // 这里使用getTemp不直接发送get请求,等到multiSend时再发送  
    const noticeQuery = db.collection('config').getTemp()  
    const res = await db.multiSend(bannerQuery,noticeQuery)  
    console.log(res);  
}

然后报错。。。

11:57:01.700 [本地调试]"收到clientDB multiSend请求:表名:opendb-banner;表名:config"   
11:57:01.729 [本地调试]TypeError: Cannot read property 'split' of undefined  
11:57:01.729 [本地调试]    at C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\uni-curd\index.js:1:15114  
11:57:01.741 [本地调试]    at Array.forEach (<anonymous>)  
11:57:01.742 [本地调试]    at getUsedActionList (C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\uni-curd\index.js:1:15078)  
11:57:01.754 [本地调试]    at t.exports (C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\uni-curd\index.js:1:206953)  
11:57:01.754 [本地调试]    at Object.exports.main (C:\D\HBuilderX\plugins\unicloud\internal-functions\DCloud-clientDB\index.js:1:77)  
11:57:01.764 [本地调试]    at u (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:1548)  
11:57:01.764 [本地调试]    at h (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:2443)  
11:57:01.777 [本地调试]    at uniCloudSecret (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:7098)  
11:57:01.788 [本地调试]    at module.exports (C:\D\HBuilderX\plugins\unicloud\aliyun\serve.js:1:7122)  
11:57:01.797 [本地调试]    at module.exports.exec (C:\D\HBuilderX\plugins\unicloud\server\controller\cloudfunctions.js:1:1416)

更多关于uni-app clientDB前端API同时发送多条数据库请求multi-send接口报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

卸载HBuilderX内的 uniCloud调试插件再安装试试

更多关于uni-app clientDB前端API同时发送多条数据库请求multi-send接口报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没用,试过了重装HBuilderX都没用。。uniCloud调试插件版本号:2.0.13-2021102914

不过连接云端云函数调试确实没问题。。只是本地云函数调试会出现这个问题

回复 w***@qq.com: alpha版本已修复此bug,可以更新到最新alpha看下

这个错误是由于uniCloud的clientDB在解析multiSend请求时,尝试对undefined值执行split操作导致的。根据错误堆栈信息,问题出现在uni-curd模块的getUsedActionList函数中。

主要原因是查询条件不完整。虽然使用了getTemp()方法,但查询缺少必要的where条件或权限验证信息。

请按以下方式修正代码:

onLoad:async function (e) {  
    // 添加where条件,即使是空条件也需要明确指定
    const bannerQuery = db.collection('opendb-banner').where({}).getTemp()
    const noticeQuery = db.collection('config').where({}).getTemp()
    const res = await db.multiSend(bannerQuery, noticeQuery)
    console.log(res)
}

或者如果需要进行条件查询:

onLoad:async function (e) {  
    const bannerQuery = db.collection('opendb-banner')
        .where({status: 1})  // 添加具体查询条件
        .getTemp()
    
    const noticeQuery = db.collection('config')
        .where({type: 'system'})
        .getTemp()
    
    const res = await db.multiSend(bannerQuery, noticeQuery)
    console.log(res)
}
回到顶部