• 点餐小程序实战教程04-用户注册


    我们上一篇讲解了自定义方法以及生命周期函数的概念,本节我们讲解一下数据源操作的方法。

    1 查询单条数据

    在我们的业务逻辑里,是要根据用户的登录信息来去数据源获取数据,根据返回结果来判断是否注册过。这里就涉及到要如何过滤数据的问题,微搭为数据过滤提供了标准的api,先打开api文档

    https://cloud.tencent.com/document/product/1301/96166#.E6.9F.A5.E8.AF.A2.EF.BC.88wedagetitemv2.EF.BC.89

    在这里插入图片描述
    这里用到了查询单条的api,将示例代码贴入到我们的自定义代码中

    export default async function ({ event, data }) {
       const userInfo = await $w.auth.getUserInfo()
       const openid = userInfo.openId
       console.log("openid", openid)
       const result = await $w.cloud.callDataSource({
          dataSourceName: "sjmx_ftf41oj",
          methodName: "wedaGetItemV2",
          params: {
             // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
             filter: {
                where: {
                   $and: [
                      {
                         _id: {
                            $eq: "f8f6930864c11fee007010104a2589c4", // 获取单条时,推荐传入_id数据标识进行操作
                         },
                      },
                   ],
                },
             },
             select: {
                $master: true, // 常见的配置,返回主表
             },
          },
       });
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    需要修改的是dataSourceName,在编辑器的左侧菜单点击数据源的图标
    在这里插入图片描述
    找到我们的数据源,在名称旁边就是数据源的标识,替换到dataSourceName里
    在这里插入图片描述
    然后构造查询条件,查询条件需要写在where里,$ and表示且的关系,如果需要多个条件就在$ and里继续扩充,我们这里需要根据openid来查,将代码改为如下
    在这里插入图片描述
    这个条件的意思是根据当前登录用户的openid进行过滤,条件是相等$ eq表示相等的意思

    2 全局变量

    微搭中的变量按照作用域分为页面变量和全局变量,页面变量只能在本页面中使用,全局变量可以在整个应用生命周期内使用。

    在代码区的全局点击新建,创建一个全局变量user
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2 判断用户是否存在

    查询单条的返回值是一个对象,我们可以判断对象是否为空来验证用户是否注册过,代码如下

     if (Object.keys(result).length === 0) {
          $w.utils.navigateTo({
             pageId: 'index', // 页面 Id
             params: { key: 'value' },
          })
       }else{
          $w.app.dataset.state.user = result
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们通过对象的原型方法来判断对象是否为空,如果一个对象没有键那么就表示空对象。如果是空对象我们就跳转到用户注册页面,在左上角点击页面创建的图标创建一个用户注册页面
    在这里插入图片描述
    在这里插入图片描述
    然后复制一下页面ID
    在这里插入图片描述
    替换到我们的pageId里
    在这里插入图片描述
    这样首页加载完成后就会做页面的跳转,跳转到注册页面

    可以看到代码还有一个分支,如果对象不为空,说明已经注册过了,那我们就将查询的结果赋值给我们的全局变量

    在javascript中使用if/else来表示分支结构,通常If语句的小括号里表示条件,这个条件通常是一个表达式,比如我们这里的判断对象是否为空。表达式通常返回结果是true或者false,如果条件为真我们就执行if里的逻辑,如果条件为假,我们就执行else里的逻辑

    如果需要多分支的结构我们还可以使用if/else if/else的结构,我们这里只有两个分支上述代码就可以了

    完整的代码

    /**
     * 
     * 可通过 $page 获取或修改当前页面的 变量 状态 handler lifecycle 等信息
     * 可通过 app 获取或修改全局应用的 变量 状态 等信息
     * 具体可以console.info 在编辑器Console面板查看更多信息
     * 注意:该方法仅在所属的页面有效
     * 如果需要 async-await,请修改成 export default async function() {}
     * 帮助文档 https://cloud.tencent.com/document/product/1301/57912
     **/
    
    /**
     * @param {Object} event - 事件对象
     * @param {string} event.type - 事件名
     * @param {any} event.detail - 事件携带自定义数据
     *
     * @param {Object} data
     * @param {any} data.target - 获取事件传参的数据
     **/
    export default async function ({ event, data }) {
       const userInfo = await $w.auth.getUserInfo()
       const openid = userInfo.openId
       console.log("openid", openid)
       const result = await $w.cloud.callDataSource({
          dataSourceName: "yhgl_euikgv5",
          methodName: "wedaGetItemV2",
          params: {
             // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
             filter: {
                where: {
                   $and: [
                      {
                         openid: {
                            $eq: openid, // 获取单条时,推荐传入_id数据标识进行操作
                         },
                      },
                   ],
                },
             },
             select: {
                $master: true, // 常见的配置,返回主表
             },
          },
       });
    
       if (Object.keys(result).length === 0) {
          $w.utils.navigateTo({
             pageId: 'u_yong_hu_zhu_ce', // 页面 Id
             params: { key: 'value' },
          })
       }else{
          $w.app.dataset.state.user = result
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    总结

    本节我们主要讲解了数据源方法的使用以及条件语句的使用,在编程中熟练掌握语法是你实现功能的前提条件,如果基础比较薄弱的同学还是要先学习一下基本的javascript语法,正所谓磨刀不误砍柴工,该投入的还是要投入的。

  • 相关阅读:
    python速成2——流程控制与基本数据结构
    【006】函数
    读《Gaitset: Regarding gait as a set for cross-view gait recognition》
    人群环境中基于深度强化学习的移动机器人避障算法
    DotNetCore.CAP 基础应用
    中缀表达式 - 栈实现综合计算器
    Ubuntu 20.04编译GPMP2过程记录
    JavaScript面向对象(1)—对象的创建和操作
    不使用oh-my-zsh配置轻量级zsh环境
    MyBatis-plus实现逆向生成器
  • 原文地址:https://blog.csdn.net/u012877217/article/details/133603526