微信小程序开发入门之共享账本(六)
接着上一篇
上次说了登录,是时候把各种数据往数据库里写,记住这些用户信息了
打开IDE(集成开发环境缩写),打开云开发界面,选择数据库,点击新建集合collection(对应于关系型数据库中的表table)
输入集合名称,点击确定完成
NOSQL数据库不用预先定义有哪些字段field(对应关系型数据库的列colum),但是我们还是要计划好这个集合有哪些字段,下面是一个简单的设计
其中_id是自动生成的,是记录的唯一id,其余是自行设定的字段
定义好集合的字段后,可以先在云开发环境中测试一下,云开发环境提供了一个很好的测试工具,在数据库页面下面的[高级操作]里
点开[未命名模板],将里面的内容删除,输入下面代码进行测试
db.collection('user').add({ data:{ name:'花钱', avatarUrl:'', activeAcctBookId:'', joinTime:new Date(), acctBooks:[] }})
代码很容易理解,db代表数据库,等同于cloud.database(),是云开发测试环境为了测试方便默认提供的,我们在代码里写的时候还是要自己手动获取一下
db..collection('')是定位需要操作的集合,这里输入刚刚新建的user集合。
后面接着就是对这个集合的各种操作,add/delete/update/get分别对应增删改查操作,更详细的介绍可以看官方文档,现在不看也行,后面需要了当资料去查就行
add操作需要传入一个对象,对象必须包括要增加的数据,选填成功/失败/完成情况下的回调函数,这里我们只填数据data就行
点击下面的[执行]按钮,会弹出一个提示
这表示你的数据操作脚本没有错误,点击确定后会在右边显示执行结果
返回的是新增记录默认生成的_id
回到user集合,可以看到已经新增了一条数据,内容就是脚本里的内容,_id就是执行结果显示的字符串
刚刚写的脚本可以选择存起来,以便以后复用,点击[执行]旁边的[保存]按钮即可将脚本保存,单击脚本名称可以重命名脚本,最好用一个容易分辨的名字
云开发环境的操作就到这里了,再回到IDE主界面
这里说一下云开发方式,云开发不是不需要后台环境,而是腾讯给你提供了一个现成的环境,以前需要自己配的运行环境和数据库现在都准备的好好的,剩下的只需要你提供自定义的操作函数就行,这个操作函数就叫做[云函数]
云函数的默认文件夹是cloudfunction,在之前一直用的miniprogram上面
在上面右键,选择新建云函数
你把之前的更改提交了吗?一定要养成提交的习惯,等代码多起来了会感觉到帮助很大
提交完了就还是右键,新建云函数
输入云函数名称,这里是登录用,可以用login
新建的云函数默认会上传到云开发环境,我这边显示上传失败了,提示有同名函数,不知道是什么时候加的,先删了再说
打开云开发,选择[云函数],可以看到确实有一个叫login的函数
点击[删除]可以删除已有的云函数
再回到IDE中,在login文件夹上右键,选择上传并部署:云端安装…即可完成云函数在云端的部署
然后再打开云开发,选择[云函数],可以看到又有一个叫login的函数
打开login函数的index.js文件,内容更改如下
const cloud = require('wx-server-sdk')cloud.init()const db = cloud.database()// 云函数入口函数exports.main = async (event, context) => { let user = event.user user.openId = event.userInfo.openId let p = await db.collection('user').add({ data: user }) if(p._id && p._id != ''){ return Promise.resolve() } else { return Promise.reject('插入数据失败') }}
event参数是小程序调用时传入的参数,它本身自带一个字段userInfo,其中包含用户的openId和小程序的appId,这里我们会用到openId;user是我们在程序中上传的用户信息
取出新用户信息和openId后,调用数据库的add操作进行添加数据,数据库操作本身是异步的,加上await关键字后可以用同步的方式来处理其返回结果。
如果添加数据成功则返回结果p中包含新数据的_id字段的值,所以可以据此判断是否新增数据成功,给前台相应的响应。
新增用户的操作应该放在用户第一次授权的地方进行处理,所以我们修改welcome的go函数来处理新增用户信息的操作,代码更改如下
go:function(e){ if(e.detail.userInfo){ let info = e.detail.userInfo let p = wx.cloud.callFunction({ name:'login', data:{ user:{ name: info.nickName, avatarUrl:info.avatarUrl, joinTime:new Date(), activeAcctBookId:'', acctBooks:[] } } }) p.then(res => { wx.navigateTo({ url: '../index/index' }) }).catch(err => { console.error(err) wx.showToast({ title: '新建用户失败', icon:'fail' })})}}
其中通过wx.cloud.callFunction的方式来调用云函数,参数name标明云函数的名称,data表示要上送的数据,这里我们送的是新用户的信息,因为云函数会返回一个Promise对象,所以这里要用then和catch来分别处理成功(Promise.resolve)和失败(Promise.reject)的情况,如果在云函数中返回的是一个值,则只需要在then中对值进行判断来处理
运行之前先要清除一下已经授权的信息,在IDE上方一排菜单中,最后有一个清缓存的下拉框
点击选择[清除授权数据]即可清除
运行程序,点击登录,界面上还是一样没什么变化
我们打开云开发界面,切到数据库,看看user集合里是不是新增了一条新的数据
好了,今日份开发到此完成