云函数端代码如下
app.router('detail', async(ctx, next) => {
let blogId = event.blogId //从云数据库中取到对应博客信息
// 详情查询
let detail = await blogCollection.where({
_id: blogId
}).get().then((res) => {
return res.data //获取到的博客数据储存在data中
})
// 评论查询
const countResult = await blogCollection.count() //查询数据总数
const total = countResult.total
let commentList = {data: []}
if (total > 0) {
const batchTimes = Math.ceil(total / MAX_LIMIT) //要查询的次数,ceil为向上取整
const tasks = []
for (let i = 0; i < batchTimes; i++) {
let promise = db.collection('blog-comment').skip(i * MAX_LIMIT)
.limit(MAX_LIMIT).where({
blogId //要查询的索引为博客ID
}).orderBy('createTime', 'desc').get() //通过get得到想要的结果
tasks.push(promise)
}
if (tasks.length > 0) {
commentList = (await Promise.all(tasks)).reduce((acc, cur) => { //累加器
return {
data: acc.data.concat(cur.data)
}
})
}
}
ctx.body = { //将获取到的信息返回到前台
commentList,
detail,
}
})
调用端代码如下
data: {
blog: {},
commentList: [],
blogId: ''
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
// console.log(options)
this.setData({
blogId:options.blogId
})
this._getBlogDetail()
},
_getBlogDetail(blogId) {
wx.showLoading({
title: '加载中',
mask: true,
})
wx.cloud.callFunction({
name: 'blog',
data: {
blogId: this.data.blogId,
$url: 'detail',
}
}).then((res) => {
let commentList = res.result.commentList.data
for(let i = 0,len = commentList.length;i<len;i++){
commentList[i].createTime = formatTime(new Date(commentList[i].createTime))
}
this.setData({
commentList,
blog:res.result.detail[0],
})
wx.hideLoading()
console.log(res)
})
},
报错:cloud function service error code -504002, error message 查询参数对象值不能均为undefined
初学者实在是搞不定这个错误了,百度上也找不到对应的解决方法,求助各位大佬了
死较真,你就不能一行一行代码的写吗,排除法了解一下
未知错误,不用解决,等等就好了。
你写的是网易云那个小程序吧
/** * 生命周期函数--监听页面加载 */ onLoad: function(options) { // console.log(options) this.setData({ blogId:options.blogId }) this._getBlogDetail() },
你这里没有传递参数,(this.blogId)
const countResult = await blogCollection.count() //查询数据总数
这里数据库错了 应该是选择评论的那个数据库,