uni-app小程序中无法在云函数中使用JQL语句

uni-app小程序中无法在云函数中使用JQL语句 产品分类:uniCloud/App

示例代码:

'use strict';  
const db=uniCloud.database()  
exports.main = async (event, context) => {  
    let day=new Date  
    let datetime="2021-12-31"  
    const dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云函数的event和context,必传  
            event,  
            context  
        })  
    const order=dbJQL.collection('food').field('_id,isnew,food_score,food_name,food_image,category,tab').getTemp()  
    return dbJQL.collection('show-food',order).where({"show_date":datetime}).get()  
    return res  
};  

更多关于uni-app小程序中无法在云函数中使用JQL语句的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

试一下关闭所有客户端,然后启动小程序,别访问其他云函数单独访问这个云函数看看表现。如果这时表现正常的话,这个问题会在3.3.7-alpha修复

更多关于uni-app小程序中无法在云函数中使用JQL语句的实战教程也可以访问 https://www.itying.com/category-93-b0.html


呃,现在就是小程序和H5一起运行的话,多编译几次就会随机一个端出现“云函数没有JQL依赖”,然后重新运行多几次就会出现“无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。”的问题。这直接就影响运行了。

回复 1***@qq.com: 升级到3.3.7-alpha试试看

在 uni-app 小程序云函数中使用 JQL,需要注意以下几点:

  1. databaseForJQL 获取的是 JQL 实例,不是普通数据库实例,但 JQL 的链式调用方法与 database() 不同:JQL 不支持 .getTemp() 后再传入第二个参数。你的代码中 dbJQL.collection('show-food', order) 是错误的,JQL 的 collection 方法只接受一个集合名称参数。

  2. JQL 查询应当使用完整的 .where().get(),或者使用模板字符串(推荐)。你尝试用 getTemp() 构造临时表再联查,但 uniCloud.databaseForJQL 返回的实例不支持这种写法,应直接写 JQL 语句字符串。

  3. 正确写法:在云函数中使用 uniCloud.databaseForJQL() 后,通过 dbJQL.where().get() 或直接使用 JQL 字符串执行。示例修正:

const dbJQL = uniCloud.databaseForJQL({ event, context })
// 方法1:使用完整 JQL 语句(推荐)
const res = await dbJQL.collection('food')
  .where(`show_date == "${datetime}"`)
  .field('_id,isnew,food_score,food_name,food_image,category,tab')
  .get()

// 方法2:如果要在同一集合上联查,注意JQL不支持传第二个collection参数,应改用aggregate或内嵌查询
回到顶部