【2020云开发+源码】30分钟创建并上线微信小程序实战项目 | 零成本 | 云数据库 | 云函数

简介: 3、登录功能(云函数的创建和调用)4、点击按钮生成记录数据(云数据库的插入)

三、登录功能


1、在pages/me/me.wxml文件中添加登录按钮


<button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">登录</button>


2、在me.js文件中添加onGotUserInfo方法和userInfo变量


Page({
  data: {
    userInfo:{}
  },
  onGotUserInfo: function (e) {
    this.setData({
      userInfo: e.detail.userInfo
    })
    console.log("userInfo", this.data.userInfo)
  },
})



点击登录按钮,在控制台会打印出用户的信息,如下



image.png


但是现在获取到的信息中没有openid这个字段,openid是每个微信号的唯一标识,微信昵称,头像、地址这些都可能会改变,但是openId不会改变,我们要实现登录功能并识别客户,必须要获取到这个openid字段。


openid字段属于比较敏感的信息,我们需要从微信服务器中获取,这个就要用到我们的云函数了,在我们创建的cloud文件夹中创建一个云函数,右键–新建Node.js云函数,命名为login

image.png


可以看到他会默认帮我们创建两个文件,index.js和package.json配置文件,package.json文件一般不做操作,主要操作的就是index.js文件


打开index.js文件,默认帮我们写了一些代码,前面两行代码是每个云函数文件中必有的SDK插件是http请求处理插件,然后再init初始化


我们将不需要的代码删除一下,可以看到下面已经帮我们获取到了openid,我们将其他的删掉,只留下openid。最后login/index.js文件中的代码如下

const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  return {
    openid: wxContext.OPENID,
  }
}


重要!!!云函数修改好了之后,一定要右键点击云函数,选择创建并部署(或者上传并部署)出现部署成功的弹窗,修改才会生效
很多人会忘记,只要修改了就有重新上传部署,才能看到修改后的效果


image.png


3、接下来来到pages/me/me.js文件,调用云函数,还是在onGotUserInfo方法中使用wx.cloud.callFunction调用login云函数


Page({
  data: {
    userInfo:{},
    //新加一个openid变量,保存获取到的openid字段
    openid:""
  },
  onGotUserInfo: function(e){
    //将this对象保存到that中
    const that = this
    wx.cloud.callFunction({
      name: 'login',
      success: res => {
        console.log('云函数调用成功')
        that.setData({
          openid: res.result.openid,
          userInfo: e.detail.userInfo
        })
        console.log("userInfo", this.data.userInfo)
        console.log("openid", this.data.openid)
      },
      fail: err => {
        console.error('[云函数] [login] 调用失败', err)
      }
    })
  }
})


这样就获取到了用户信息还有openid,接下来,我们来将获取到的用户信息展示出来,并隐藏登录按钮


<!-- 通过openid来判断用户是否登录
如果openid字段为空,说明没有登录,显示登录按钮 -->
<view wx:if="{{!openid}}">
  <button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">登录</button>
</view>
<!-- 如果openid不为空,就说明用户登录了
读取用户昵称和用户头像显示到页面上 -->
<view class="uploader-container" wx:if="{{openid}}">
  <image class="image" src="{{userInfo.avatarUrl}}"></image>
  <view class='name'>{{userInfo.nickName}}</view>
</view>


再来到me.wxss文件中加个样式


.image {
  width: 100px;
  height: 100px;
  margin: 0 auto;
  display: block;
  padding-top:20px;
}
.name {
  text-align: center;
  padding-top:10px;
}
button{
  background: #EA5149;
  width: 60%;
  margin-top: 100px;
  color: #ffffff;
}


登录之后页面的显示如下:


image.png



4、保持用户的登录状态


现在每次刷新,获取到的用户信息就又没有了,我们想要保持用户的登录状态,就需要获取到用户信息后,将用户信息保存到缓存当中,这样刷新页面之后直接检查缓存中是否有用户信息就可以判断是否登录过,而不是一次次的请求后端重新获取用户信息


来到me.js文件中,修改onGotUserInfo方法,在success中添加代码

success: res => {
  console.log('云函数获取成功', res.result.openid)
  that.setData({
    openid: res.result.openid,
    userInfo: e.detail.userInfo
  })
  //需要添加的代码
  //将openid字段加入到userInfo变量中
  this.data.userInfo.openid = this.data.openid
  //打印一下当前userInfo的信息,检查是否有openid字段
  console.log("userInfo", this.data.userInfo)
  //将userinfo信息保存到缓存中
   wx.setStorageSync('ui', this.data.userInfo)


然后再添加onLoad小程序生命周期函数,获取缓存中的用户信息,页面加载时触发。一个页面只会调用一次


onLoad: function (options) {
  const ui = wx.getStorageSync('ui')
  this.setData({
    userInfo: ui,
    openid:ui.openid
  })
}


这样我们再刷新页面,会自动获取用户信息,不需要重复登录了


四、点击按钮生成记录数据(云数据库的插入和查询)


1、完善首页样式


首页主要就是创建两个按钮,并显示当前的加减的数值,将pages/index/index.wxml文件中的代码清空,加上+1和-1两个按钮


<view class="container">
  <view class="right button">+ 1</view>
  <view class="left button">- 1</view>
</view>


再来将pages/index/index.wxss文件的代码清空,粘贴上下面的代码


.button{
  width: 70px;
  height: 70px;
  line-height:70px;
  border-radius: 20%;
  border: none;
  text-align:center;
  font-size: 25px;
  color:#FFFFFF;
  font-weight:bold;
  margin-top:50px;
}
.right{
  background:#EA5149;
  float: right;
}
.left{
  background:#feb600;
}


现在保存文件看一下效果,可以看到上面有一个空白的间隔,

我们来到app.wxss文件中,将padding: 200rpx 0;这个样式去掉,再保存样式就正常了


image.png


2、实现点击首页的加减按钮,在控制台中打印出加减的信息


在pages/index/index.wxml文件中的两个按钮上面添加data-add=“1” bindtap=“addLog” 方法


<view class="right button" data-add="1" bindtap="addLog">+ 1</view>
<view class="left button" data-add="-1" bindtap='addLog'>- 1</view>


在两个按钮,这个要注意addLog传参不能这样写addLog(1),参数需要写在前面data-add中,其中add是我们自己定义的,换成别的单词也可以


再来到pages/index/index.js文件中,清空原先的代码,并创建addLog方法


Page({
  //event就是我们通过data-add传递的参数对象
  addLog(event){
    //传递的参数event.currentTarget.dataset.add这样来获取
    const add = event.currentTarget.dataset.add
    console.log("add", add)
  }
})


现在点击加减按钮,在控制台中已经可以打印出add的数字, 接下来我们将这个数据插入到数据库中

 

3、向数据库中添加加减记录数据


点击微信开发者工具中上面的云开发按钮,来到云开发后台,需要创建数据库集合logs


image.png


集合创建完成之后,点击权限设置,将数据记录的权限更改为【所有用户可读,仅创建者可读写】


image.png


// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
  try {
    return await db.collection('logs').add({
      //event是从前端传递过来的参数对象,我们后面会在pages/index/index.js文件中的addLog方法中调用云函数createlog时,传递add、date、openid这些参数
      data: {
        add: event.add,
        date:event.date,
        openid:event.openid
      }
    })
  }catch(e){
    //插入数据错误
    console.log(e)
  }
}


再来到cloud云开发文件中创建一个云函数createlog,在cloud/createlog/index.js文件中,实现往logs数据表中插入一条记录的功能


修改完成云函数createlog之后,不要忘记部署函数,右键点击这个云函数,选择【创建并部署:云端安装依赖】选项


接下来编辑pages/index/index.js文件的addlog方法,调用云函数createlog,并传递add、date、openid这三个参数


  addLog(event){
    const add = event.currentTarget.dataset.add
    console.log("add", add)
    //需要添加的部分
    const that = this
    const ui = wx.getStorageSync('ui')
    //如果缓存中没有用户信息,就跳转到我的页面
    if (!ui.openid){
      wx.switchTab({
        url: '/pages/me/me',
      })
    }else{
      //调用云函数createlog
      wx.cloud.callFunction({
        name: "createlog",
        data: {
          add: add,
          date: Date.now(),
          openid: ui.openid
        },
        success: function (res) {
          console.log(res)
        },
        fail: function (res) {
          console.log(res)
        }
      })
    }
  },


来测试一下,在首页点击加减按钮,就会在数据库中插入数


image.png


这样首页功能就完成了,接下来我们来将插入的这些数据读取出来,展示在logs日志页面中

目录
相关文章
|
XML Java Android开发
微信虚拟视频插件安卓,微信虚拟相机替换拍照,java源码分享
完整的相机应用项目包含三个主要文件:主活动实现、布局文件和清单文件。代码实现了相机预览、
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
1333 5
|
11月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
11月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
11月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
人工智能 小程序 前端开发
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
923 0
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
小程序 Java 关系型数据库
weixin116大学生就业平台微信小程序+ssm(文档+源码)_kaic
本文介绍了一款大学生就业平台微信小程序的开发过程,涵盖开发环境、系统设计、实现与测试等方面。该小程序基于微信平台特性,采用MYSQL数据库存储数据,确保系统稳定与安全,同时满足学生、企业和管理员不同权限用户的功能需求。通过简化操作流程,实现了招聘信息查看、简历投递等实用功能,旨在为用户提供便捷高效的求职体验,符合“操作简单,功能实用”的设计理念。
|
小程序 JavaScript Java
基于SpringBoot的智慧停车场微信小程序源码分享
智慧停车场微信小程序主要包含管理端和小程序端。管理端包括停车场管理,公告信息管理,用户信息管理,预定信息管理,用户反馈管理等功能。小程序端包括登录注册,预约停车位,停车导航,停车缴费,用户信息,车辆信息,钱包充值,意见反馈等功能。
1205 5
基于SpringBoot的智慧停车场微信小程序源码分享
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。

热门文章

最新文章