新建云开发就不多说了,详见前面一个项目的开发环境介绍。
这次的树洞小程序,用到的功能比较多,需要记录也比较多,所以直接介绍一下我的数据组成。
以功能为出发点,来商讨一下需要多少张表来存储数据。
首先用户个人信息不用说①
广场发布的帖子(还有交易市场,两种帖子的细分属性不一样,所以建立多一站表比较容易管理)②③
点赞④⑤评论表⑥(参考相册项目的点赞表,为什么点赞表需要两张,一张是点赞记录,一张是意向购买记录,意向购买我们要在消息中使用)
伪聊天表⑦。
以上就是我们对这个项目主要做的一个细分做表。
接下来介绍一下,每张表所存储的数据格式:
①用户表的结构字段:
②③帖子表
点赞/意向购买④⑤表
评论表⑥
伪聊天表⑦。
以上,为数据库的主要组成,接下来做一个登录模块的介绍。
相比于之前的项目,这个项目做了一个伪加载的优化。
第一个空页面,先判断是否登录过。FirstPage.js
const app=getApp()
Page({
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
if (!wx.cloud) {
wx.showToast({
title: '尚未登录',
icon: 'none',
duration: 1500
})
return
}
// 判断是否授权
wx.getSetting({
success: res => {
//console.log(res.authSetting);
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像暱称,不会弹框
wx.cloud.callFunction({
name: 'login',
data: {},
success: res => {
//console.log('[云函数] [login] user openid: ', res.result.openid)
app.globalData.openid = res.result.openid
wx.setStorageSync("myOpenId", res.result.openid);
wx.getUserInfo({
success: res => {
this.setData({
avatarUrl: res.userInfo.avatarUrl,
userInfo: res.userInfo
})
wx.setStorage({
key: "Userinfo",
data: this.data.userInfo
})
wx.setStorage({
key: "User_openid",
data: app.globalData.openid
})
wx.switchTab({
url: '../Main_page/Main_page',
})
}
})
},
fail: err => {
console.error('[云函数] [login] 调用失败', err)
wx.showToast({
title: '云函数:调用失败',
icon: 'none',
duration: 1500
})
}
})
}
else{
wx.redirectTo({
url: '../Login/Login',
})
}
}
})
},
})
已授权,进入主页面。首次/未授权的,进入授权页面,新用户进入的话往数据库添加用户的数据:
Login.js
const app = getApp()
var template = require('../../template/template.js');
var util=require('../../utils/util.js');
Page({
data: {
avatarUrl: '',
userInfo: {},
},
onLoad: function () {
},
onGetOpenid: function (e) {
let that=this
wx.getUserInfo({
success: res => {
this.setData({
avatarUrl: res.userInfo.avatarUrl,
userInfo: res.userInfo
})
wx.setStorage({
key: "Userinfo",
data: this.data.userInfo
})
// 调用云函数
wx.cloud.callFunction({
name: 'login',
data: {},
success: res => {
console.log('[云函数] [login] user openid: ', res.result.openid)
app.globalData.openid = res.result.openid
wx.setStorageSync("myOpenId", res.result.openid);
const db = wx.cloud.database({ env: 'textllinpro-5br77' })
return db.collection('Assistant_User').add({ //添加人
data: {
Username: that.data.userInfo.nickName,
Last_to_Reply: Date.now(),
Last_toup_Time: Date.now(),
User_head_url: that.data.userInfo.avatarUrl,
Creat_user_Time: Date.now()
}
}).then(res => {
console.log(res);
wx.switchTab({
url: '../Mine_page/Mine_page',
})
})
},
fail: err => {
console.error('[云函数] [login] 调用失败', err)
wx.showToast({
title: '云函数:调用失败',
icon: 'none',
duration: 1500
})
}
})
}
})
}
})
Login.wxml
<import src="../../template/template.wxml"/><!--miniprogram/pages/sdsq/sdsq.wxml-->
<view class='main'>
<view class='head'>
<view class='ima'><image src='/images/sq.png'></image></view>
<view class='lb'><label>小程序需要您的微信授权才能使用哦!</label></view>
</view>
<view class='body'>
<view class='unlb'>
<button open-type="getUserInfo" class='ubutton' bindgetuserinfo="onGetOpenid">微信登录授权</button>
</view>
</view>
</view>
登录这部分仍需要完善,因为如果我曾经授权登录之后,如果我取消的授权再次进入,用户的数据将会重复。这里还有待考虑,可以加一个判断,判断在用户表中是否存在Openid(唯一),再进行是否用户的创建。