云开发-如何维护用户表?
需求分析
需求:维护用户表,用于个人中心、排行、点赞、评论、等功能都需要用到。
实现思路:
- 通过 login 云函数获取 openid 存放到本地
- 在授权信息的时候去添加 userInfo
- 根据 openid 去查询是否已经存储
- 没有查到就是新用户进行添加并存放 id 到本地
- 查看后老用户就根据 id 进行更新信息
代码实现
获取opneid云函数
login:
/**
* 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端
*
* event 参数包含小程序端调用传入的 data
*
*/
exports.main = (event, context) => {
console.log(event)
console.log(context)
// 可执行其他自定义逻辑
// console.log 的内容可以在云开发云函数调用日志查看
// 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
客户端调用login函数存放opneid到本地
wx.cloud.callFunction({
name: 'login',
}).then(res => {
wx.setStorageSync('openid', res.result.openid)
})
授权信息操作
db.collection('users').where({
_openid: wx.getStorageSync('openid') // 填入当前用户 openid
}).get().then(res => {
if (!res.data.length) {
// 新用户
db.collection('users').add({
data: {
userInfo: e.detail.userInfo
}
}).then(res => {
wx.setStorageSync('id', res._id)
})
} else {
// 老用户
db.collection('users').doc(wx.getStorageSync('id')).update({
data: {
userInfo: e.detail.userInfo
}
}).then(console.log)
}
})
总结
用户表可以说是最重要的一张表,在这里主要就是注意一定要去重,所以我们在 add 之前还去查询是否是新用户的判断。当然这个逻辑代码可以写在客户端同样也可以写成云函数。
如有收获,记得点赞、收藏
如有疑问,欢迎进行留言讨论