• ArthurSlog

  • SLog-76

  • Year·1

  • Guangzhou·China

  • September 17th 2018

微信扫描二维码,关注我的公众号
  • ArthurSlog Page

  • GitHub

  • NPM Package Page

  • 掘金主页

  • 简书主页

  • segmentfault

甚爱必大费 多藏必厚亡 故知足不辱 知止不殆 可以长久


开发环境MacOS(High Sierra 10.13.5)

需要的信息和信息源:

  • 小程序官方文档

  • 小程序端API文档(客户端)

  • 云端API文档(服务端)

前言

  • 微信开发者工具版本: v 1.02.1809111

  • ”云开发“ 封装好了一些常用的业务逻辑,提供了以下方面的相关API供开发者使用:

  1. 云函数

  2. 数据库

  3. 存储管理

开始编码

  • 现在先把微信开发工具更新至最新(1.02.1809101),有部分开发人员在微信社区反馈更新之后没有看到“云开发”的按钮

  • 解决办法:点击检查更新,等待更新完全完成之后重启开发工具

  • 重点:云开发方式需要appid,请准备好

  • 当前云开发模版的微信小程序文件结构如下:

cloudfunctions| - login| - index.js| - package.json| - package-lock.json| - arthurSlog_getInfo| - index.js| - package.json| - package-lock.json| - arthurSlog_methodAdd| - index.js| - package.json| - package-lock.jsonminiprogram| - images| - code-db-inc-dec.png| - code-db-onAdd.png| - code-db-onQuery.png| - code-db-onRemove.png| - code-func-sum.png| - console-entrance.png| - create-collection.png| - pages| - addFunction| - addFunction.js| - addFunction.json| - addFunction.wxml| - addFunction.wxss| - chooseLib| - chooseLib.js| - chooseLib.json| - chooseLib.wxml| - chooseLib.wsxx| - databaseGuide| - databaseGuide.js| - databaseGuide.json| - databaseGuide.wxml| - databaseGuide.wxss| - deployFunctions| - deployFunctions.js| - deployFunctions.json| - deployFunctions.wxml| - deployFunctions.wxss| - index| - index.js| - index.wxml| - index.wxss| - user-unlogin.png| - storageConsole| - storageConsole.js| - storageConsole.json| - storageConsole.wxml| - storageConsole.wxss| - userConsole| - userConsole.js| - userConsole.json| - userConsole.wxml| - userConsole.wxss| - style| - guide.wxss| - app.js| - app.json| - app.wxssREADME.md
project.config.json
复制代码
  • 本次来玩一下数据库,首先在更新主页面代码如下:

Client: miniprogram/pages/index/index.wxml

<!--index.wxml-->
<view class="container"><!-- 用户 openid --><view class="userinfo"><button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo" class="userinfo-avatar" style="background-image: url({{avatarUrl}})"></button></view><!-- 操作数据库 --><view class="uploader"><button class="userinfo-nickname" bindtap="arthurSlog_readingBook">我要读书(每次加1点智力值)</button></view><view class="showOpenid"><text class="textOpenid" wx:if="{{user_dbFlag}}">{{user_nickName}} 的IQ值:{{page_iq}}</text></view><!-- 获取 openid --><view class="uploader"><button class="userinfo-nickname" bindtap="arthurSlog_getInfo">点击获取 openid</button></view><view class="showOpenid"><text class="textOpenid" wx:if="{{openid}}">openid:{{openid}}</text></view><!-- 返回两个对象之和 --><view class="uploader"><button class="userinfo-nickname" bindtap="arthurSlog_methodAdd">点击返回两个对象之和</button></view><view class="showOpenid"><text class="textOpenid" wx:if="{{sumResult}}">8 + 8 = {{sumResult}}</text></view><!-- 上传图片 --><view class="uploader"><button class="userinfo-nickname" bindtap="arthurSlog_uploadImg">上传图片</button></view><!-- 显示图片 --><view><image class="img" wx:if="{{imagePath}}" src="{{imagePath}}" mode="aspectFit"></image></view></view>
复制代码
  • 可以看到,这次把一些对象的名称进行了更新,以便简洁

  • 来看一下 js文件里 与页面交互的所有对象

Client: miniprogram/pages/index/index.js

data: {avatarUrl: './user-unlogin.png',userInfo: {},   // 用户信息logged: false,  // 用来判断用户是否已经授权过了cloudPath: '',  // 云端存放文件的路径imagePath: '',  // 本地图片文件的路径openid: '',sumResult: '',  // 云端求和的结果page_iq: '',    // 页面上显示的iq值user_nickName: '',  // 微信名user_dbFlag: false, // 判断标志:判断用户在云端数据库是否存在数据
}
复制代码
  • 之前,我们一共写了三个新函数:
  1. arthurSlog_getInfo (获取用户 appId 和 openId的数据)

  2. arthurSlog_methodAdd (获取两个数相加的和)

  3. arthurSlog_uploadImg (向云端上传图片,并在本地显示出来)

  • 此次,要编写一个新的函数 arthurSlog_readingBook

  • 同时,拓展 onLoad 和 onGetUserInfo 这两个函数

  • 先来看新函数 arthurSlog_readingBook:

Client: miniprogram/pages/index/index.js

arthurSlog_readingBook: function() {const this_ = this// 验证是否已经授权if (app.globalData.logged) {// 验证云端是否存在用户数据const db = wx.cloud.database()const _ = db.command// 读取用户数据,并渲染在页面上db.collection('Users').where({_openid: _.eq(app.globalData.openid) // 填入当前用户 openid}).get().then(res => {console.log("查询数据库")if (!res.data) {console.log("云端数据库没有返回数据")console.log("用户在数据库没有数据,现在为用户创建数据库")// 创建用户数据db.collection('Users').add({// data 字段表示需新增的 JSON 数据data: {userName: app.globalData.user_nickName,userDate: db.serverDate(),IQ: '10'}}).then(res => {console.log("用户数据创建成功")console.log(res)}).catch(console.error)app.globalData.user_dbFlag = true} else if (res.data) {console.log("云端数据库成功返回数据")console.log('更新数据库')console.log('当前的全局_id值是: ' + app.globalData._id)app.globalData.IQ = res.data[0].IQ// 如果该用户有数据// 页面上IQ的值加1// 数据库IQ的值加1db.collection('Users').doc(app.globalData.id).update({data: {IQ: _.inc(1)}}).then(res => {console.log('成功更新数据库')console.log(res)this_.setData({page_iq: ++app.globalData.IQ})})}})} else if (!app.globalData.logged) {// 弹出提示框,显示“请点击头像授权”wx.showToast({icon: 'none',title: '请先点击左上角允许授权',})}
}
复制代码
  • 上面的代码,实现了每次点击 “我要读书” 按钮之后,iq值自增1(也就是每点一次按钮qi加1)

  • 怎么实现的,看一下代码可知:

  1. 当用户点击 “我要学习” 按钮的时候,判断用户是否已经授权?

  2. 已经授权 => 向云端数据库获取用户数据; 未授权 => 弹出提示框,提示用户点击左上角授权

  3. 判断获取的数据库是否返回数据?

  4. 成功返回不为空的数据 => 把获取到的数据(iq值)更新至页面,然后更新数据库的值(数据库的iq值自增1); 成功返回为空的数据 => 为用户创建数据,然后更新前端的iq值

  • 基本步骤如上,其中1、2步是 arthurSlog_readingBook函数执行的

  • 而步骤3、4中,步骤3 有一个需要点击授权的环节,这由 onGetUserInfo函数来负责:

Client: miniprogram/pages/index/index.js

// 点击弹出“微信授权” 窗口
// 用户点击“允许”,允许开发者获得用户的公开信息(昵称、头像等)
onGetUserInfo: function(e) {const this_ = thisif (!this.logged && e.detail.userInfo) {this.setData({logged: true,avatarUrl: e.detail.userInfo.avatarUrl,userInfo: e.detail.userInfo,user_nickName: e.detail.userInfo.nickName})app.globalData.openid = e.detail.userInfo.openId// 需要先获得用户信息才能查询数据库// 验证云端是否存在用户数据const db = wx.cloud.database()// 读取用户数据,并渲染在页面上db.collection('Users').where({_openid: app.globalData.openid // 填入当前用户 openid}).get().then(res => {if (res.data[0] != null) {// 如果用户存在数据// 拉取用户的IQ数据this_.setData({page_iq: res.data[0].IQ,user_dbFlag: true})} else {// 创建用户数据db.collection('Users').add({// data 字段表示需新增的 JSON 数据data: {userName: app.globalData.user_nickName,userDate: db.serverDate(),IQ: 10,id: app.globalData.openid}}).then(res => {this_.setData({page_iq: '10',user_dbFlag: true})// 添加新表成功之后,打印数据库的新用户信息console.log(res)app.globalData._id = res._id})this_.setData({user_dbFlag: true})}})app.globalData.logged = true}
}
复制代码
  • 因为授权之后重新打开小程序,不需要再授权

  • 所以,在这里,需要拓展一下 onload函数

  • 这样,在打开小程序的时候,客户端自动向云端数据库获取用户数据(iq的值)

  • 然后,将获取到的iq值 更新值页面:

Client: miniprogram/pages/index/index.js

// 小程序页面打开时,默认执行的函数
onLoad: function() {if (!wx.cloud) {wx.redirectTo({url: '../chooseLib/chooseLib',})return}const this_ = this// 获取用户信息wx.getSetting({success: res => {if (res.authSetting['scope.userInfo']) {// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框wx.getUserInfo({success: res => {this.setData({avatarUrl: res.userInfo.avatarUrl,userInfo: res.userInfo,user_nickName: res.userInfo.nickName,logged: true,user_dbFlag: true})app.globalData.logged = trueapp.globalData.user_dbFlag = trueapp.globalData.openid = res.userInfo.openidconst db = wx.cloud.database()const _ = db.command// 读取用户数据,并渲染在页面上db.collection('Users').where({_openid: _.eq(app.globalData.openid) // 填入当前用户 openid}).get().then(res => {console.log(res.data)if (res.data != null) {// 如果用户存在数据// 拉取用户的IQ数据this_.setData({page_iq: res.data[0].IQ,user_dbFlag: true})} else {console.log("拉取云端数据出错")}})}})}}})
}
复制代码
  • 现在,请保存好更新过代码的文件

  • 接着,在模拟器里对各个按钮进行测试

  1. 点击“我要读书”,会弹出窗口提示你“请先点击左上角进行授权”

  2. 点击“左上角”,点击”允许“授权,现在会在“我要读书”按钮的下方出现“XXX的IQ值:10”

  3. 已经允许授权之后,点击“我要读书”,每点击一次,下方出现的IQ值会加1

  4. 点击“点击获取openid”,会在下方得到你的 openid

  5. 点击“返回两个对象之和”,会在下方得到对象的和

  6. 点击“上传图片”,选择图片并“打开后”,图片会上传至云端,同时在页面上显示出来

  • 至此,我们使用小程序云开发实现了小程序端和云端数据库的交互。

欢迎关注我的微信公众号 ArthurSlog

微信扫描二维码,关注我的公众号

如果你喜欢我的文章 欢迎点赞 留言

谢谢

Slog76_用一个简单的游戏演示与数据库的交互(微信小程序之云开发-全栈时代6)...相关推荐

  1. 对微信小程序的云开发模式的简单理解

  2. json 微信小程序 筛选_GitHub - zhengyangkang/sl-filter: uni -app 一款使用简单的筛选组件,适配app、微信小程序、H5。...

    sl-filter 筛选 筛选组件,组件名:sl-filter dcloud插件市场地址 sl-filter 简介 一款使用简单的筛选组件,适配app.微信小程序.H5. 感谢分享 效果图 并列菜单 ...

  3. 开发一个可以查询并显示数据库内容的微信小程序

    使用微信开发者工具可以创建云数据库,并通过代码可以查询并在客户端显示数据库的内容. 附:小程序一个功能页面有wxml(客户端呈现),js(功能函数),json,wxss(个性化处理),这些是局部的文件 ...

  4. 另一个小程序 返回的支付结果如何得到_微信小程序商城的开发商家需要注意什么?...

    原标题:微信小程序商城的开发商家需要注意什么? 小程序的应用目前已经成为人们使用较为普遍的平台,无论是用于吃喝玩乐亦或是工具.商业发展等.微信作为小程序的首家推出平台,凭借其自身的10亿流量用户让小程 ...

  5. 微信小程序+阿里云+stm32f407的一个项目

    ** 微信小程序+阿里云+stm32f407的一个项目## 小程序参考了大神半颗心脏的博客和资料, 小程序多个页面推送数据 因为自己做小程序是类似商城的一个demo, 其中数据需要与单片机进行交互,而 ...

  6. 新手如何用微信小程序和云数据库做一个论坛?【帖子页】

    新手小白用微信小程序和云数据库做一个论坛[帖子页] 先放个效果图 由于后面换了头像,所以评论的头像和发帖的头像不一样. 要做个同款论坛,首先需要用到云数据库.在微信开发者工具的左上角开通云开发就可以了 ...

  7. 一个月一个微信小程序(个人开发)---“助你考公“(一周年纪念礼物)

    一.项目背景 与女友一周年纪念日即将来临的前一个月,突发奇想想写个小程序作为礼物(她考公).八月多还在实习,所以白天大多数时间是工作的,只有晚上和周末,以及九月上旬的完整时间. 二.项目构思 小程序, ...

  8. [微信小程序]组件化开发,以一个自定义模块框组件当做示例(附完整示例代码和效果图)

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 自定义组件我把它分为简单的三个步骤, 1.创建组件 --- 2.编写组件  ---   3.调用,使用 ...

  9. 微信小程序绑定云服务器文档,微信小程序云开发搭建一个管理小程序.pdf

    微微信信小小程程序序云云开开发发 搭搭建建一一个个管管理理小小程程序序 概概述述 : 开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云 能力. 云开发为开发者提供完整的云 支持, ...

  10. 个人如何免费申请一个微信小程序账号进行开发尝鲜

    大家都知道微信小程序并没有开放个人申请注册账号,觉得很遗憾,作为一个开发者,居然不能一览究竟. 前段时间研究了一番,教大家如何个人申请注册一个小程序账号,不花300块钱,当然只能作为开发尝鲜,不能发布 ...

最新文章

  1. win10 64位SSDT函数索引动态查找
  2. 不能将参数 2 从“const char *”转换为“LPCWSTR”【转】http://blog.sina.com.cn/s/blog_4a94a0db0100ktxp.html...
  3. View页面间的跳转
  4. php删除数据库中数据表的数据,php中删除数据库数据例子
  5. 程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
  6. md函数MySQL_MySQL的常用SQL语句.md
  7. C语言及程序设计提高例程-21 首尝排序——冒个泡
  8. linux写文件操作同步,linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)...
  9. sqlserver 字符转数值_PLC根据寄存器数值查询MySQL/SQLServer数据库,将数据到寄存器...
  10. Java元宵趣图_模仿百度首页“元宵节汤圆”动图(js的定时任务:setInterval)
  11. UIPageControl 分页
  12. 新手如何发布第一个Python项目开源包?这里有一份详细指南
  13. java中普通变量、静态变量、静态代码块初始化的顺序辨析
  14. 场编码MBAFF相关
  15. Latex学习笔记(十五)特殊符号的插入
  16. skiller3.31 发布
  17. SASA: Semantics-Augmented Set Abstraction for Point-based 3D Object Detection
  18. SNF快速开发平台2020版
  19. mobile web开发遇到的问题
  20. 特写:美国B2C网站惨淡经营

热门文章

  1. 转盘抽奖的案例-----
  2. nanopi制作个人服务器,NanoPi K2 服务器系统镜像
  3. 无需越狱手机,下载越狱版本IPA的方法
  4. C#LINQ方法操作-Max求数组集合中最大值
  5. 主机名包含中文导致无法访问MAC虚拟机
  6. 六石管理学:到了一定境界,确实可以随心所欲
  7. 编程基本功:如何判断两个线段有重叠?
  8. 分析一个JDK卡死问题,还真有点麻烦
  9. 软件的卡顿与卡死,意思是不同的
  10. 怀念的不是初恋,是那段时光