m***@foxmail.com
m***@foxmail.com
  • 发布:2023-07-15 11:33
  • 更新:2023-07-17 11:29
  • 阅读:199

关于JQL中where查询的问题,头疼

分类:uniCloud

我写了一个云对象,代码如下:

const db = uniCloud.databaseForJQL();  
module.exports = {  
    async getNews(params) {  
        const collection = db.collection('news');  
        const {  
            category_id,   
            currentPage = 1,   
            pageSize = 3  
        } = params;  
        let start = (currentPage - 1) * pageSize;  
        let res = await collection.where("category_id == '" + category_id + "'")  
        .field("cover,title,excerpt,publish_date,category_id")  
        .orderBy('publish_date', 'desc')  
        .skip(parseInt(start))  
        .limit(parseInt(pageSize))  
        .get();  
        return res.data;  
    }  
}

然后将此云对象部署后URL化处理,然后使用runapi软件进行接口的测试,一切正常,如下图所示:

但我在uniapp中,使用http请求,访问此云对象,返回的结果为空,如下图所示:


下图所传参数,可以看到,参数和runapi中是一样的:

然后我在where条件中,换了一种写法:

let res = await collection.where({  
            category_id: category_id  
        }).field("cover,title,excerpt,publish_date,category_id")  
        .orderBy('publish_date', 'desc')  
        .skip(parseInt(start))  
        .limit(parseInt(pageSize))  
        .get();

这样做了以后,在runapi中,还是可以正常获取数据。但在前端程序中,使用http请求后,where条件就失效了。他会把数据表里的所有记录读出来,就相当于没有加where条件。我的数据表里一共只有2条记录,从下图可以看到,全部读出来了。

我在前端程序中,如果不用http的方式调用接口,而是直接使用云函数,当然也是能正常获取数据的。只是如果使用uniCloud.databaseForJQL,where中的条件,既可以写成字符串拼接,也可以写成对象。而如果是使用uniCloud.database,则where中只能使用对象的形式。

请问,这到底 要怎么搞啊?头疼。太复杂了。

2023-07-15 11:33 负责人:无 分享
已邀请:
m***@foxmail.com

m***@foxmail.com (作者)

找到问题了,原来是参数的原因。参数未传过去。我使用了x-www-form-urlencoded,这个在云端使用getParams是读取不到的。用form-data也不行。只有使用JSON才行,然后将云端改成getHttpInfo读取。

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

不同格式的payload在云端的解析是不一样的

要回复问题请先登录注册