我写了一个云对象,代码如下:
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中只能使用对象的形式。
请问,这到底 要怎么搞啊?头疼。太复杂了。