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

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

1 查询单条数据

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

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

点餐小程序实战教程04-用户注册_第1张图片
这里用到了查询单条的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, // 常见的配置,返回主表
         },
      },
   });

}

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

2 全局变量

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

在代码区的全局点击新建,创建一个全局变量user
点餐小程序实战教程04-用户注册_第5张图片
点餐小程序实战教程04-用户注册_第6张图片
点餐小程序实战教程04-用户注册_第7张图片

2 判断用户是否存在

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

 if (Object.keys(result).length === 0) {
      $w.utils.navigateTo({
         pageId: 'index', // 页面 Id
         params: { key: 'value' },
      })
   }else{
      $w.app.dataset.state.user = result
   }

我们通过对象的原型方法来判断对象是否为空,如果一个对象没有键那么就表示空对象。如果是空对象我们就跳转到用户注册页面,在左上角点击页面创建的图标创建一个用户注册页面
点餐小程序实战教程04-用户注册_第8张图片
点餐小程序实战教程04-用户注册_第9张图片
然后复制一下页面ID
点餐小程序实战教程04-用户注册_第10张图片
替换到我们的pageId里
点餐小程序实战教程04-用户注册_第11张图片
这样首页加载完成后就会做页面的跳转,跳转到注册页面

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

在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
   }
}

总结

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

你可能感兴趣的:(小程序,微搭,低代码)