最近写小程序感觉来了很多灵感,但在开发中还是避免不了遇到各种问题。
这次遇到的问题有点奇葩,来跟大家分享一下。
我们知道,在调用数据库的时候通常会遇到权限问题而不能够获取到数据。
所以在使用数据库的时候,第一件事就是要把数据库的权限给设置好了。注意其使用的一个范围。
但是问题总是在你不经意间出现,逻辑没错、权限也没错,就是获取不到数据。
在我的这个集合中有个字段为openID,我想通过openID来获取该条数据,数据库权限也已经改为所有用户可读。但在使用的时候就是获取不到该数据。
userlist.where({
openID:this.data.openid
}).get({
success:res=>{
console.log(res)
}
})
这语句没一点毛病,返回一个data数组,显示为零。
真的很郁闷,始终没有找到解决的办法。
因为在其他的集合中我也是通过相同的方法来获取的数据,只不过使用的字段不同。
在我灵光一闪,突然想到,openID既然不行,那就通过每条数据都固有的特定值来获取吧,这就是 字段 _id 。 _id 是每条数据都会有的一个特殊标志,在数据添加到数据库时自动生成的。
那么现在问题又来了,这条数据我都拿不到,我该怎样去获取这个 _id 呢?
别着急,往下我么一起探讨:
我的解决办法是,通过页面之间的数据传递,将该条信息的 _id 在其他页面获取,然后再传过来到这个页面。
拿我这个来做示例,我这个信息是用户的信息储存,在首页会有登录操作,所以我就在首页将该数据传入数据库中,是通过云函数传的。然后云函数返回一个信息里面包含这条数据的 _id ,然后我将此 _id 设置为本页面data里面的一个值,然后在通过页面跳转将该值传递到下一个页面,接着在下一个页面的onload(options)方法中的参数options中获取这个 _id 。
data:{
_Id:''
}
wx.cloud.callFunction({ //判断是否登陆
name:"isLogin",
complete:res=>{
if(res.result.data.length!=0){
this.setData({
_Id:res.result.data[0]._id //获取_id
})
wx.navigateTo({
url: '../admin/admin?&masterId='+this.data._Id //页面跳转将_Id传到下个页面
})
}
})
}else{
wx.showToast({
title: '请先登录',
icon:'none',
duration:1000
})
}
}
})
上面代码是通过跳转路径将值传递给下一个页面,接着我们来到下一个页面:
data:{
_Id:''
}
onLoad: function (options) {
console.log(options._Id) //获取上个页面传过来的 _Id
this.setData({
_Id:options._Id //再将该 _Id 设置为本页面data里面的数据值
})
},
通过简单的页面跳转传参,就可以轻松获取你想要的值。
然后在你想调用集合中数据的那个页面,通过_Id 来获取集合中的值,权限设置为所有用户可读,即可获取该条数据。
欢迎关注公众号【夜来疏影】