微信公众号开发

想做微信小程序云开发内容

本文主要是介绍想做微信小程序云开发内容,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。

云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。

目前提供三大基础能力支持:

           1、云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码

           2、数据库:一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库

           3、存储:在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理

具体的可以去小程序文档上查看,下面用一个登录注册的案例来演示小程序云开发数据库的运用

注册

在创建的时候,要在点下一步的时候,调数据库来看用户名有没有重复的。在点击同意的时候来调用数据库,然后把所有的判断放到下一步来判断。所有条件都满足就将用户名和密码放到全局变量中。


  1. var app = getApp();

  2. Page({

  3. data: {

  4. userName: '',

  5. userPassword: '',

  6. userPasswordAgain: '',

  7. checkbox: false,

  8. repetition: false

  9. },

  10. // 返回主页面

  11. backHomeTap: function() {

  12. wx.switchTab({

  13. url: '../index/index',

  14. })

  15. },

  16. // 绑定

  17. bindingTap: function () {

  18. wx.redirectTo({

  19. url: '../login/login',

  20. })

  21. },

  22. // 用户名

  23. userNameInput: function(e) {

  24. this.setData({

  25. userName: e.detail.value

  26. });

  27. },

  28. // 密码

  29. userPasswordInput: function(e) {

  30. this.setData({

  31. userPassword: e.detail.value

  32. });

  33. },

  34. // 再次输入密码

  35. userPasswordAgainInput: function(e) {

  36. this.setData({

  37. userPasswordAgain: e.detail.value

  38. });

  39. },

  40. // 同意

  41. checkboxChange: function() {

  42. if (this.data.checkbox === false) {

  43. this.setData({

  44. checkbox: true

  45. })

  46. } else {

  47. this.setData({

  48. checkbox: false

  49. })

  50. }

  51. var that = this;

  52. var userName = this.data.userName;

  53. // 初始化云

  54. wx.cloud.init({

  55. env: 'wubaib-9543f7',

  56. traceUser: true

  57. });

  58. // 初始化数据库

  59. const db = wx.cloud.database();

  60. const _ = db.command;

  61. db.collection('userInformation').where({

  62. userName: _.eq(userName)

  63. }).get({

  64. success: function (res) {

  65. if (res.data.length === 1) {

  66. that.setData({

  67. repetition: true

  68. })

  69. }

  70. }

  71. })

  72. },

  73. // 下一步,完善个人信息

  74. perfectInforTap: function() {

  75. var userName = this.data.userName;

  76. var userPassword = this.data.userPassword;

  77. var checkbox = this.data.checkbox;

  78. var userPasswordAgain = this.data.userPasswordAgain;

  79. var name = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;

  80. var repetition = this.data.repetition;

  81. if (userName === '') {

  82. wx.showToast({

  83. title: '请输入用户名',

  84. icon: 'none',

  85. duration: 2000,

  86. mask: true

  87. })

  88. } else if (!name.test(userName)) {

  89. wx.showToast({

  90. title: '用户名格式不正确',

  91. icon: 'none',

  92. duration: 2000,

  93. mask: true

  94. })

  95. } else if (repetition === true) {

  96. wx.showToast({

  97. title: '用户名已存在',

  98. icon: 'none',

  99. duration: 2000,

  100. mask: true

  101. })

  102. } else if (userPassword === '') {

  103. wx.showToast({

  104. title: '请输入密码',

  105. icon: 'none',

  106. duration: 2000,

  107. mask: true

  108. })

  109. } else if (userPassword.length < 6) {

  110. wx.showToast({

  111. title: '密码最少6位',

  112. icon: 'none',

  113. duration: 2000,

  114. mask: true

  115. })

  116. } else if (userPassword !== userPasswordAgain) {

  117. wx.showToast({

  118. title: '两次密码输入不一致',

  119. icon: 'none',

  120. duration: 2000,

  121. mask: true

  122. })

  123. } else if (checkbox === false) {

  124. wx.showToast({

  125. title: '请选中已阅读',

  126. icon: 'none',

  127. duration: 2000,

  128. mask: true

  129. })

  130. } else {

  131. wx.redirectTo({

  132. url: 'perfectInfor/perfectInfor',

  133. })

  134. // 保存用户名和密码

  135. app.appData.account = {

  136. userName: userName,

  137. userPassword: userPassword

  138. }

  139. }

  140. }

  141. })

在完善信息的时候获取所有的变量(用户名和密码也在内),然后在点击下一步完成按钮将数据上传到数据库。


  1. var app = getApp();

  2. Page({

  3. data: {

  4. userName: '',

  5. userPassword: '',

  6. phone: '',

  7. realName: '',

  8. card: '',

  9. email: '',

  10. },

  11. // 返回主界面

  12. backHomeTap: function() {

  13. wx.switchTab({

  14. url: '../../index/index',

  15. })

  16. },

  17. // 手机号

  18. phoneInput: function(e) {

  19. this.setData({

  20. phone: e.detail.value

  21. });

  22. },

  23. // 真实姓名

  24. nameInput: function(e) {

  25. this.setData({

  26. realName: e.detail.value

  27. });

  28. },

  29. // 身份证

  30. cardInput: function(e) {

  31. this.setData({

  32. card: e.detail.value

  33. })

  34. },

  35. // email

  36. emailInput: function(e) {

  37. this.setData({

  38. email: e.detail.value

  39. })

  40. },

  41. // 下一步完成

  42. registerSuccessTap: function() {

  43. var phone = this.data.phone;

  44. var realName = this.data.realName;

  45. var card = this.data.card;

  46. var email = this.data.email;

  47. var userName = this.data.userName;

  48. var userPassword = this.data.userPassword;

  49. var phonereg = /^1[345789]\d{9}$/;

  50. var namereg = /^[\u4E00-\u9FA5]+$/;

  51. var cardreg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/;

  52. var emailreg = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;

  53. var that = this;

  54. if (phone === '') {

  55. wx.showToast({

  56. title: '请输入手机号',

  57. icon: 'none',

  58. duration: 2000,

  59. mask: true

  60. });

  61. } else if (!phonereg.test(phone)) {

  62. wx.showToast({

  63. title: '请输入正确的手机号',

  64. icon: 'none',

  65. duration: 2000,

  66. mask: true

  67. })

  68. } else if (!namereg.test(realName)) {

  69. wx.showToast({

  70. title: '请输入正确的名字',

  71. icon: 'none',

  72. duration: 2000,

  73. mask: true

  74. })

  75. } else if (card === '') {

  76. wx.showToast({

  77. title: '请输入身份证',

  78. icon: 'none',

  79. duration: 2000,

  80. mask: true

  81. })

  82. } else if (!cardreg.test(card)) {

  83. wx.showToast({

  84. title: '请输入正确的身份证',

  85. icon: 'none',

  86. duration: 2000,

  87. mask: true

  88. })

  89. } else if (email === '') {

  90. wx.showToast({

  91. title: '请输入邮箱',

  92. icon: 'none',

  93. duration: 2000,

  94. mask: true

  95. })

  96. } else if (!emailreg.test(email)) {

  97. wx.showToast({

  98. title: '请输入正确的邮箱',

  99. icon: 'none',

  100. duration: 2000,

  101. mask: true

  102. })

  103. } else {

  104. // 初始化云

  105. wx.cloud.init({

  106. env: 'wubaib-9543f7',

  107. traceUser: true

  108. });

  109. // 初始化数据库

  110. const db = wx.cloud.database();

  111. db.collection('userInformation').add({

  112. // data 字段表示需新增的 JSON 数据

  113. data: {

  114. realName: realName,

  115. userName: userName,

  116. userPassword: userPassword,

  117. phone: phone,

  118. email: email,

  119. card: card

  120. },

  121. success: function(res) {

  122. // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id

  123. console.log(res);

  124. console.log(res.errMsg);

  125. }

  126. })

  127. }

  128. },

  129. /**

  130. * 生命周期函数--监听页面显示

  131. */

  132. onShow: function() {

  133. this.setData({

  134. userName: app.appData.account.userName,

  135. userPassword: app.appData.account.userPassword

  136. })

  137. },

  138. })

登录

在登录页面,先获取用户输入的用户名和密码。在点击登录的时候,先根据userName调数据库的密码和用户输入的密码是否相等。如果相等将用户的信息保存到全局变量中。


  1. var app = getApp();

  2. Page({

  3. data: {

  4. bindName: '',

  5. bindPassword: '',

  6. isChecked: false,

  7. userName: '',

  8. phone: '',

  9. realName: '',

  10. card: '',

  11. email: '',

  12. userId: ''

  13. },

  14. // 点击注册账号

  15. registerTap: function() {

  16. wx.redirectTo({

  17. url: '../register/register'

  18. })

  19. },

  20. // 获取用户名

  21. bindNameInput: function(e) {

  22. this.setData({

  23. bindName: e.detail.value

  24. })

  25. var that = this;

  26. if (that.data.bindName.length !== 0 && that.data.bindPassword.length !== 0) {

  27. this.setData({

  28. isChecked: true

  29. })

  30. } else if (that.data.bindName.length === 0) {

  31. this.setData({

  32. isChecked: false

  33. })

  34. }

  35. },

  36. // 获取密码

  37. bindPasswordInput: function(e) {

  38. this.setData({

  39. bindPassword: e.detail.value

  40. })

  41. var that = this;

  42. if (that.data.bindName.length !== 0 && that.data.bindPassword.length !== 0) {

  43. this.setData({

  44. isChecked: true

  45. })

  46. } else if (that.data.bindPassword.length === 0) {

  47. this.setData({

  48. isChecked: false

  49. })

  50. }

  51. },

  52. // 点击登录

  53. bindingSuccess: function() {

  54. var that = this;

  55. var bindName = that.data.bindName;

  56. var bindPassword = that.data.bindPassword;

  57. if (bindName.length !== 0 && bindPassword.length !== 0) {

  58. // 初始化云

  59. wx.cloud.init({

  60. env: 'wubaib-9543f7',

  61. traceUser: true

  62. });

  63. // 初始化数据库

  64. const db = wx.cloud.database();

  65. db.collection('userInformation').where({

  66. userName: bindName

  67. }).get().then(res => {

  68. console.log(res.data);

  69. if (res.data[0].userPassword === bindPassword) {

  70. console.log("登录成功");

  71. // 保存手机号,真实姓名,身份证号,邮箱 保存用户名

  72. that.setData({

  73. userName: res.data[0].userName,

  74. phone: res.data[0].phone,

  75. realName: res.data[0].realName,

  76. card: res.data[0].card,

  77. email: res.data[0].email,

  78. userId: res.data[0]._id

  79. })

  80. app.appData.userinfo = {

  81. phone: that.data.phone,

  82. realName: that.data.realName,

  83. card: that.data.card,

  84. email: that.data.email

  85. }

  86. app.appData.account = {

  87. userName: that.data.userName

  88. }

  89. app.appData.userId = {

  90. userId: that.data.userId

  91. }

  92. wx.switchTab({

  93. url: '../personalCenter/personalCenter',

  94. })

  95. } else {

  96. wx.showToast({

  97. title: '用户名或密码错误',

  98. icon: 'none',

  99. duration: 2000

  100. })

  101. }

  102. })

  103. }

  104. },

  105. })

登录WXML


  1. <view class='phoneNumberContainer'>

  2. <input placeholder='用户名' maxlength='11' bindinput="bindNameInput"></input>

  3. </view>

  4. <view class='passwordContainer'>

  5. <input placeholder='密码' password="true" bindinput="bindPasswordInput"></input>

  6. </view>

  7. <view class="{{isChecked?'bindingChecked':'bindingNormal'}}" bindtap='bindingSuccess'>立即登录</view>

  8. <view class='registerContainer' bindtap='registerTap'>注册账号</view>

注册第一步的WXML


  1. <!--返回主页 -->

  2. <view class='backHome' bindtap='backHomeTap'>

  3. <image src='/images/homeIcon.png' class='backHomeImg'></image>

  4. </view>

  5. <!--头部 -->

  6. <view class='headerContainer'>

  7. <!--创建账户 -->

  8. <view class='headerListContainer headerListActive'>

  9. <view class='headerListView'>1</view>

  10. <text class='headerListText'>创建账户</text>

  11. </view>

  12. <!--完善个人信息 -->

  13. <view class='headerListContainer'>

  14. <view class='headerListView'>2</view>

  15. <text class='headerListText'>完善个人信息</text>

  16. </view>

  17. <!--注册成功 -->

  18. <view class='headerListContainer'>

  19. <view class='headerListView'>3</view>

  20. <text class='headerListText'>注册成功</text>

  21. </view>

  22. <view class='transverseLineLeft'></view>

  23. <view class='transverseLineright'></view>

  24. </view>

  25. <view class='mainContainer'>

  26. <!--用户名 -->

  27. <view class='mainListContainer'>

  28. <view class='mainListText'>用户名</view>

  29. <input class='mainListInput' placeholder='请输入数字,字母或中文' maxlength='25' bindinput='userNameInput'></input>

  30. </view>

  31. <!--密码 -->

  32. <view class='mainListContainer'>

  33. <view class='mainListText'>密码</view>

  34. <input class='mainListInput' placeholder='长度6~14位' password='true' maxlength='14' bindinput='userPasswordInput'></input>

  35. </view>

  36. <!--确认密码 -->

  37. <view class='mainListContainer'>

  38. <view class='mainListText'>确认密码</view>

  39. <input class='mainListInput' placeholder='请再次输入密码' password='true' maxlength='14' bindinput='userPasswordAgainInput'></input>

  40. </view>

  41. </view>

  42. <!--agree -->

  43. <view class='agreeContainer'>

  44. <checkbox class='agreeCheckbox' checked="{{check}}" bindtap="checkboxChange"/>

  45. <text>我已阅读并接受</text>

  46. <text class='clause'>《用户注册条款》</text>

  47. </view>

  48. <!--nextButton -->

  49. <view class='nextButton' bindtap='perfectInforTap'>下一步,完善个人信息</view>

  50. <!--binding -->

  51. <view class='bindingContainer'>

  52. <text>已有账号</text>

  53. <text class='binding' bindtap='bindingTap'>请绑定</text>

  54. </view>

注册第二步WXML


  1. <!--返回主页 -->

  2. <view class='backHome' bindtap='backHomeTap'>

  3. <image src='/images/homeIcon.png' class='backHomeImg'></image>

  4. </view>

  5. <!--头部 -->

  6. <view class='headerContainer'>

  7. <!--创建账户 -->

  8. <view class='headerListContainer headerListOldActive'>

  9. <view class='headerListView'>1</view>

  10. <text class='headerListText'>创建账户</text>

  11. </view>

  12. <!--完善个人信息 -->

  13. <view class='headerListContainer headerListActive'>

  14. <view class='headerListView'>2</view>

  15. <text class='headerListText'>完善个人信息</text>

  16. </view>

  17. <!--注册成功 -->

  18. <view class='headerListContainer'>

  19. <view class='headerListView'>3</view>

  20. <text class='headerListText'>注册成功</text>

  21. </view>

  22. <view class='transverseLineLeft'></view>

  23. <view class='transverseLineright'></view>

  24. </view>

  25. <!--main -->

  26. <view class='mainContainer'>

  27. <!--手机 -->

  28. <view class='mainListContainer'>

  29. <view class='mainListText'>手机</view>

  30. <input class='mainListInput' placeholder='请输入手机号码' maxlength="11" bindinput='phoneInput'></input>

  31. </view>

  32. <!--真实姓名 -->

  33. <view class='mainListContainer'>

  34. <view class='mainListText'>真实姓名</view>

  35. <input class='mainListInput' placeholder='请输入真实姓名' maxlength='25' bindinput='nameInput'></input>

  36. </view>

  37. <!--证件类型 -->

  38. <view class='mainListContainer'>

  39. <view class='mainListText'>证件类型</view>

  40. <view class='cardText'>中华人民共和国居民身份证</view>

  41. </view>

  42. <!--证件号码 -->

  43. <view class='mainListContainer'>

  44. <view class='mainListText'>证件号码</view>

  45. <input class='mainListInput' type='idcard' placeholder='请输入身份证号码' maxlength="18" bindinput='cardInput'></input>

  46. </view>

  47. <!--邮箱 -->

  48. <view class='mainListContainer'>

  49. <view class='mainListText'>邮箱</view>

  50. <input class='mainListInput' placeholder='请输入常用的邮箱地址' bindinput='emailInput'></input>

  51. </view>

  52. </view>

  53. <!--nextButton -->

  54. <view class='nextButton' bindtap='registerSuccessTap'>下一步,完成</view>

好多人问我要源码,我就不一个一个发了。要源码的自己git下载吧

下载地址:GitHub - wubaibin/wx_yunkaifa: 微信云开发

业务搭载离不了云服务器,选择合适的平台最重要!

从目前国内云计算市场的格局来看,国内云计算前三强分别是阿里云、腾讯云和华为云,阿里云、腾讯云作为背靠互联网平台的企业,更偏向于B端用户;华为与作为传统的通信巨头,更偏向于G端。

本人从事云计算相关工作至今已有多年,国内主流的云平台都接触过,包括他们的销售及技术团队,对各家的产品也小有了解,并且指导过数百家企业迁移上云,对云平台选择也有一定的发言权!

网上有很多评测,评测数据也五花八门,说谁好的都有,这个两篇博文分析汇总的非常详细,分享给大家,文档地址:

博文1:云服务器哪家好!阿里云、腾讯云、华为云的服务器配置及价格对比?​

博文2:阿里云服务器突发型t6、n4、s6、c5、c6怎么选?和腾讯云服务器标准型s3、sn3ne、s4、s5、sa2相比哪家好?全面解析

如果是高并发,高IO业务场景,需要确定服务器规格,可让业务应用性能发挥到最佳,参考官方文档:

阿里云服务器规格:规格实例族 - 云服务器 ECS

腾讯云服务器规格:规格实例族 - 云服务器CVM

这篇关于想做微信小程序云开发内容的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!