微信小程序云开发(数据库)详解

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

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

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

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

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

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

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

注册

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

var app = getApp();
Page({
 data: {
  userName: '',
  userPassword: '',
  userPasswordAgain: '',
  checkbox: false,
  repetition: false
 },
 // 返回主页面
 backHomeTap: function() {
  wx.switchTab({
   url: '../index/index',
  })
 },
 // 绑定
 bindingTap: function () {
  wx.redirectTo({
   url: '../login/login',
  })
 },
 // 用户名
 userNameInput: function(e) {
  this.setData({
   userName: e.detail.value
  });
 },
 // 密码
 userPasswordInput: function(e) {
  this.setData({
   userPassword: e.detail.value
  });
 },
 // 再次输入密码
 userPasswordAgainInput: function(e) {
  this.setData({
   userPasswordAgain: e.detail.value
  });
 },
 // 同意
 checkboxChange: function() {
  if (this.data.checkbox === false) {
   this.setData({
    checkbox: true
   })
  } else {
   this.setData({
    checkbox: false
   })
  }
  var that = this;
  var userName = this.data.userName;
  // 初始化云
  wx.cloud.init({
   env: 'wubaib-9543f7',
   traceUser: true
  });
  // 初始化数据库
  const db = wx.cloud.database();
  const _ = db.command;
  db.collection('userInformation').where({
   userName: _.eq(userName)
  }).get({
   success: function (res) {
    if (res.data.length === 1) {
     that.setData({
      repetition: true
     })
    }
   }
  })
 },
 // 下一步,完善个人信息
 perfectInforTap: function() {
  var userName = this.data.userName;
  var userPassword = this.data.userPassword;
  var checkbox = this.data.checkbox;
  var userPasswordAgain = this.data.userPasswordAgain;
  var name = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;
  var repetition = this.data.repetition;
  if (userName === '') {
   wx.showToast({
    title: '请输入用户名',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (!name.test(userName)) {
   wx.showToast({
    title: '用户名格式不正确',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (repetition === true) {
   wx.showToast({
    title: '用户名已存在',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (userPassword === '') {
   wx.showToast({
    title: '请输入密码',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (userPassword.length < 6) {
   wx.showToast({
    title: '密码最少6位',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (userPassword !== userPasswordAgain) {
   wx.showToast({
    title: '两次密码输入不一致',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (checkbox === false) {
   wx.showToast({
    title: '请选中已阅读',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else {
   wx.redirectTo({
    url: 'perfectInfor/perfectInfor',
   })
   // 保存用户名和密码
   app.appData.account = {
    userName: userName,
    userPassword: userPassword
   }
  }
 }
})

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

​var app = getApp();
Page({
 data: {
  userName: '',
  userPassword: '',
  phone: '',
  realName: '',
  card: '',
  email: '',
 },
 // 返回主界面
 backHomeTap: function() {
  wx.switchTab({
   url: '../../index/index',
  })
 },
 // 手机号
 phoneInput: function(e) {
  this.setData({
   phone: e.detail.value
  });
 },
 // 真实姓名
 nameInput: function(e) {
  this.setData({
   realName: e.detail.value
  });
 },
 // 身份证
 cardInput: function(e) {
  this.setData({
   card: e.detail.value
  })
 },
 // email
 emailInput: function(e) {
  this.setData({
   email: e.detail.value
  })
 },
 // 下一步完成
 registerSuccessTap: function() {
  var phone = this.data.phone;
  var realName = this.data.realName;
  var card = this.data.card;
  var email = this.data.email;
  var userName = this.data.userName;
  var userPassword = this.data.userPassword;
  var phonereg = /^1[345789]\d{9}$/;
  var namereg = /^[\u4E00-\u9FA5]+$/;
  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])$/;
  var emailreg = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;
  var that = this;
  if (phone === '') {
   wx.showToast({
    title: '请输入手机号',
    icon: 'none',
    duration: 2000,
    mask: true
   });
  } else if (!phonereg.test(phone)) {
   wx.showToast({
    title: '请输入正确的手机号',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (!namereg.test(realName)) {
   wx.showToast({
    title: '请输入正确的名字',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (card === '') {
   wx.showToast({
    title: '请输入身份证',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (!cardreg.test(card)) {
   wx.showToast({
    title: '请输入正确的身份证',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (email === '') {
   wx.showToast({
    title: '请输入邮箱',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else if (!emailreg.test(email)) {
   wx.showToast({
    title: '请输入正确的邮箱',
    icon: 'none',
    duration: 2000,
    mask: true
   })
  } else {
   // 初始化云
   wx.cloud.init({
    env: 'wubaib-9543f7',
    traceUser: true
   });
   // 初始化数据库
   const db = wx.cloud.database();
   db.collection('userInformation').add({
    // data 字段表示需新增的 JSON 数据
    data: {
     realName: realName,
     userName: userName,
     userPassword: userPassword,
     phone: phone,
     email: email,
     card: card
    },
    success: function(res) {
     // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
     console.log(res);
     console.log(res.errMsg);
    }
   })
  }
 },

 /**
  * 生命周期函数--监听页面显示
  */
 onShow: function() {
  this.setData({
   userName: app.appData.account.userName,
   userPassword: app.appData.account.userPassword
  })
 },
})

登录

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

​var app = getApp();
Page({
 data: {
  bindName: '',
  bindPassword: '',
  isChecked: false,
  userName: '',
  phone: '',
  realName: '',
  card: '',
  email: '',
  userId: ''
 },
 // 点击注册账号
 registerTap: function() {
  wx.redirectTo({
   url: '../register/register'
  })
 },
 // 获取用户名
 bindNameInput: function(e) {
  this.setData({
   bindName: e.detail.value
  })
  var that = this;
  if (that.data.bindName.length !== 0 && that.data.bindPassword.length !== 0) {
   this.setData({
    isChecked: true
   })
  } else if (that.data.bindName.length === 0) {
   this.setData({
    isChecked: false
   })
  }
 },
 // 获取密码
 bindPasswordInput: function(e) {
  this.setData({
   bindPassword: e.detail.value
  })
  var that = this;
  if (that.data.bindName.length !== 0 && that.data.bindPassword.length !== 0) {
   this.setData({
    isChecked: true
   })
  } else if (that.data.bindPassword.length === 0) {
   this.setData({
    isChecked: false
   })
  }
 },
 // 点击登录
 bindingSuccess: function() {
  var that = this;
  var bindName = that.data.bindName;
  var bindPassword = that.data.bindPassword;
  if (bindName.length !== 0 && bindPassword.length !== 0) {
   // 初始化云
   wx.cloud.init({
    env: 'wubaib-9543f7',
    traceUser: true
   });
   // 初始化数据库
   const db = wx.cloud.database();
   db.collection('userInformation').where({
    userName: bindName
   }).get().then(res => {
    console.log(res.data);
    if (res.data[0].userPassword === bindPassword) {
     console.log("登录成功");
     // 保存手机号,真实姓名,身份证号,邮箱 保存用户名
     that.setData({
      userName: res.data[0].userName,
      phone: res.data[0].phone,
      realName: res.data[0].realName,
      card: res.data[0].card,
      email: res.data[0].email,
      userId: res.data[0]._id
     })
     app.appData.userinfo = {
      phone: that.data.phone,
      realName: that.data.realName,
      card: that.data.card,
      email: that.data.email
     }
     app.appData.account = {
      userName: that.data.userName
     }
     app.appData.userId = {
      userId: that.data.userId
     }
     wx.switchTab({
      url: '../personalCenter/personalCenter',
     })
    } else {
     wx.showToast({
      title: '用户名或密码错误',
      icon: 'none',
      duration: 2000
     })
    }
   })
  }
 },
})

登录WXML

<view class='phoneNumberContainer'>
 <input placeholder='用户名' maxlength='11' bindinput="bindNameInput"></input>
</view>
<view class='passwordContainer'>
 <input placeholder='密码' password="true" bindinput="bindPasswordInput"></input>
</view>
<view class="{{isChecked?'bindingChecked':'bindingNormal'}}" bindtap='bindingSuccess'>立即登录</view>
<view class='registerContainer' bindtap='registerTap'>注册账号</view>

注册第一步的WXML

<!--返回主页 -->
<view class='backHome' bindtap='backHomeTap'>
 <image src='/images/homeIcon.png' class='backHomeImg'></image>
</view>
<!--头部 -->
<view class='headerContainer'>
 <!--创建账户 -->
 <view class='headerListContainer headerListActive'>
  <view class='headerListView'>1</view>
  <text class='headerListText'>创建账户</text>
 </view>
 <!--完善个人信息 -->
 <view class='headerListContainer'>
  <view class='headerListView'>2</view>
  <text class='headerListText'>完善个人信息</text>
 </view>
 <!--注册成功 -->
 <view class='headerListContainer'>
  <view class='headerListView'>3</view>
  <text class='headerListText'>注册成功</text>
 </view>
 <view class='transverseLineLeft'></view>
 <view class='transverseLineright'></view>
</view>
<view class='mainContainer'>
 <!--用户名 -->
 <view class='mainListContainer'>
  <view class='mainListText'>用户名</view>
  <input class='mainListInput' placeholder='请输入数字,字母或中文' maxlength='25' bindinput='userNameInput'></input>
 </view>
 <!--密码 -->
 <view class='mainListContainer'>
  <view class='mainListText'>密码</view>
  <input class='mainListInput' placeholder='长度6~14位' password='true' maxlength='14' bindinput='userPasswordInput'></input>
 </view>
 <!--确认密码 -->
 <view class='mainListContainer'>
  <view class='mainListText'>确认密码</view>
  <input class='mainListInput' placeholder='请再次输入密码' password='true' maxlength='14' bindinput='userPasswordAgainInput'></input>
 </view>
</view>
<!--agree -->
<view class='agreeContainer'>
 <checkbox class='agreeCheckbox' checked="{{check}}" bindtap="checkboxChange"/>
 <text>我已阅读并接受</text>
 <text class='clause'>《用户注册条款》</text>
</view>
<!--nextButton -->
<view class='nextButton' bindtap='perfectInforTap'>下一步,完善个人信息</view>
<!--binding -->
<view class='bindingContainer'>
 <text>已有账号</text>
 <text class='binding' bindtap='bindingTap'>请绑定</text>
</view>

注册第二步WXML

<!--返回主页 -->
<view class='backHome' bindtap='backHomeTap'>
 <image src='/images/homeIcon.png' class='backHomeImg'></image>
</view>
<!--头部 -->
<view class='headerContainer'>
 <!--创建账户 -->
 <view class='headerListContainer headerListOldActive'>
  <view class='headerListView'>1</view>
  <text class='headerListText'>创建账户</text>
 </view>
 <!--完善个人信息 -->
 <view class='headerListContainer headerListActive'>
  <view class='headerListView'>2</view>
  <text class='headerListText'>完善个人信息</text>
 </view>
 <!--注册成功 -->
 <view class='headerListContainer'>
  <view class='headerListView'>3</view>
  <text class='headerListText'>注册成功</text>
 </view>
 <view class='transverseLineLeft'></view>
 <view class='transverseLineright'></view>
</view>
<!--main -->
<view class='mainContainer'>
 <!--手机 -->
 <view class='mainListContainer'>
  <view class='mainListText'>手机</view>
  <input class='mainListInput' placeholder='请输入手机号码' maxlength="11" bindinput='phoneInput'></input>
 </view>
 <!--真实姓名 -->
 <view class='mainListContainer'>
  <view class='mainListText'>真实姓名</view>
  <input class='mainListInput' placeholder='请输入真实姓名' maxlength='25' bindinput='nameInput'></input>
 </view>
 <!--证件类型 -->
 <view class='mainListContainer'>
  <view class='mainListText'>证件类型</view>
  <view class='cardText'>中华人民共和国居民身份证</view>
 </view>
 <!--证件号码 -->
 <view class='mainListContainer'>
  <view class='mainListText'>证件号码</view>
  <input class='mainListInput' type='idcard' placeholder='请输入身份证号码' maxlength="18" bindinput='cardInput'></input>
 </view>
 <!--邮箱 -->
 <view class='mainListContainer'>
  <view class='mainListText'>邮箱</view>
  <input class='mainListInput' placeholder='请输入常用的邮箱地址' bindinput='emailInput'></input>
 </view>
</view>
<!--nextButton -->
<view class='nextButton' bindtap='registerSuccessTap'>下一步,完成</view>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序云开发使用方法新手初体验

    今天看到微信推送了一条小程序云上线通知,作为一个前端er,满怀期待的去看了看,很不错先看看文档上怎么说的: 开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力,6的一匹. 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥.(就是说以后老板让你做小程序,连个后台的人都不用给你配了,自己搞定就行了). 目前提供三大基础能力支持: 云

  • 微信小程序云开发详细教程

    微信小程序云开发之初体验,供大家参考,具体内容如下 小程序云开发是微信最近推出的新的一项能力,它弱化了后端以及运维的概念,开发者无需搭建服务器,使用微信平台提供的api即可完成核心的业务开发. 目前提供三大基础能力支持: 云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码 数据库:既可在小程序前端操作,也能在云函数中读写的 JSON 数据库,免费2G容量 存储:可在小程序前端上传/下载云端文件,在云开发控制台可视化管理,免费5G容量 上手体验 打开微信开发者工具,新建

  • 解决微信小程序云开发中获取数据库的内容为空的方法

    问题描述: 在前端想获取数据库某集合中的数据时,返回的参数data始终为空数组,如下: 相关代码如下: const db = wx.cloud.database(); const activityInfo = db.collection('activityInfo'); Page({ ...省略不相干代码... onLoad(){ activityInfo.get().then((res)=>{ console.log(res) }) } ...省略不相干代码... }) 解决方案: 数据库新建

  • 微信小程序云开发之新手环境配置

    本文实例为大家分享了微信小程序云开发环境配置的具体方法,供大家参考,具体内容如下 注意:小程序云开发需要使用注册的小程序appid,测试和游客进入是没有云开发的功能. 首先我们新建小程序项目,填写申请的appID如果没有需要注册一个,微信为我们提供了一个云开发快速启动的模板,这里我们勾选进去看看云开发为我们提供的案例. 首次进入控制台会报cloud init error (云初始化错误). 如果我们填写了在微信的左上角调试器旁边有一个云开发,在这里我们点击云开发 点击开通云开发 官网建议我们建两

  • 微信小程序云开发之模拟后台增删改查

    小程序云开发出来之后,小程序开发人员也要慢慢的接触后端对数据的增删改查了.下面就给大家提供一个案例吧. 这里我把新增和修改放在了一个页面    显示页面index.wxml <view wx:if="{{books}}" class='container'> <view class='title'> <text>图书列表</text> </view> <view class='label'> <text>

  • 微信小程序云开发之云函数详解

    在上一章我们已经配好了环境,这章我们按照模板的顺序去执行提供的案例,对官方文档进行一个实践操作. 首先我们点击"点击获取 openid "文字,发现控制台报错: 云函数 调用失败 Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail requestID , cloud function service error code -504001, error messa

  • 微信小程序云开发(数据库)详解

    开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力. 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥. 目前提供三大基础能力支持: 1.云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码 2.数据库:一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库 3.存储:在小程序前端直接上传/下

  • 微信小程序云开发修改云数据库中的数据方法

    小程序代码中无法直接修改他人创建的数据记录 例如:数据库表中的_openid字段是自动生成的,哪个用户创建的记录这个openid就是用户的openid,云数据库的权限分配也是根据openid来进行的. 解决方案: 第一步:创建云函数,在函数中编写修改数据库的操作代码 // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() const _ = db.command // 云

  • 微信小程序云开发之数据库操作

    本文实例为大家分享了微信小程序云开发之数据库操作的具体代码,供大家参考,具体内容如下 新建集合 1.打开云开发控制台,数据库 2.添加集合users 添加代码 onAdd: function () { const db = wx.cloud.database() db.collection('users').add({ data: { count: 1 }, success: res => { // 在返回结果中会包含新创建的记录的 _id this.setData({ counterId: r

  • 微信小程序 云开发模糊查询实现解析

    这篇文章主要介绍了微信小程序 云开发模糊查询实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 解释: db.RegExp 从基础库 2.3.2 开始(wx-server-sdk 从 0.0.23 开始),数据库支持正则表达式查询,开发者可以在查询语句中使用 JavaScript 原生正则对象或使用 db.RegExp 方法来构造正则对象然后进行字符串匹配.在查询条件中对一个字段进行正则匹配即要求该字段的值可以被给定的正则表达式匹配 事例:

  • 微信小程序实现分页查询详解

    目录 创建自定义连接器 云开发介绍 分页实现思路 使用连接器 为什么要自定义分页功能 日常小程序经常需要分页查询的功能,本篇我们讲解一下低代码中如何实现分页查询的功能.要自己开发分页功能,可以先参考官方的方法 分页查询我们一般是需要有入参和出参,入参分别需要页码.每页大小.排序字段名称.排序方式.查询条件. 出参分别需要记录总条数.页码.每页大小.记录列表. 入参和出参知道之后,那在哪写代码呢?像分页这种功能一般属于后端的能力,低码工具中是在自定义连接器里写后端代码的. 创建自定义连接器 登录低

  • 微信小程序云开发实现数据添加、查询和分页

    本文实例为大家分享了微信小程序云开发实现数据添加.查询和分页,供大家参考,具体内容如下 实现的效果 实现要点 WXML 不同类别数据的显示 通过 if-elif-else 实现,在wxml文件中通过 <block></block>渲染,因为它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性.也就是说可以通过属性来控制页面是否要渲染这部分的内容,可以减少页面渲染时间. 云开发数据的获取 先开通云开发功能 ,参考官方文档,然后在创建项目的时候勾选上 使用云开发模板(看个人吧,

  • 我要点爆”微信小程序云开发之项目建立与我的页面功能实现

    开发环境搭建 使用自己的AppID新建小程序项目,后端服务选择小程序·云开发,点击新建,完成项目新建. 新建成功后跳转到开发者工具界面 新建后,微信端为我们提供了一个参考的模板程序,这里我们自己来创建各个所需的文件与代码,所以删除所有不需要的文件,删除cloudfunctions.miniprogram/images.miniprogram/pages文件下所有文件,同时也删除style文件和删除app.json中原始的页面配置. 此时编译下方控制台会报"VM8100:5 appJSON[&qu

  • 微信小程序云开发实现微信支付功能业务逻辑可靠

    目录 注册微信支付商户号 小程序关联商户号 业务逻辑 代码实现 今天打了几把永劫无间后,咱们来聊一聊用云开发来开发微信小程序时,如何实现微信支付,并且保证业务逻辑可靠. 注册微信支付商户号 点击“成为商家”,按照操作提示去申请商户号即可(需要营业执照,个体户或公司都行.没有可以办一个) 小程序关联商户号 注册完成,登录进去,点击产品中心.再点击AppID账号管理,关联微信小程序的AppID,同意即可. 在微信开发者工具绑定商户号,点击云开发,进入云开发控制台,点击设置,点击其他设置,添加商户号,

  • 微信小程序云开发实现分页刷新获取数据

    本文实例为大家分享了微信小程序云开发分页刷新获取数据的具体代码,供大家参考,具体内容如下 利用云函数调用数据库,在云函数中分页调取数据.再在js中不断将新的数据拼接到旧数据中,在前端显示.初始只显示5条记录,下拉刷新即可获取更多. 首先在JS中,调用云函数,获取到后端的数据: /**  * 从数据库获取数据  */   getData(num=5,page=0){     wx.cloud.callFunction({       name:"dairyGetlist",  //云函数

随机推荐