美文网首页
云开发踩坑

云开发踩坑

作者: 最终的开始 | 来源:发表于2020-12-14 14:41 被阅读0次

主要重点介绍小程序云开发步骤、云数据库操作、云函数对接腾讯短信服务

一、云开发步骤

1. 新建云开发小程序
新建项目

appId需要是注册好的 不能使用测试号

2. 开通云开发后台
点击云开发 开通云开发后台
3.环境设置

新建云环境 小程序允许建两个环境,一般一个用于正式环境,一个用于测试。
如果新建了测试环境的话,一定要在小程序中声明测试环境的环境ID,否则小程序默认使用第一个环境。


新建环境 环境配置
4.环境选择
项目目录

现在回到项目目录,其中cloudfunctions为云函数的文件夹,miniprogram为小程序页面目录。



可以看到cloudfunctions显示未选择环境,右键此目录选择环境。


选择了之后可以看到会生成几个默认的云函数,一般login是比较常用的云函数。可以获取openId等数据。


app.js配置

在app.js中设置使用的环境ID。一定要声明环境 否则云函数返回的数据为null

5.新建云函数

右键cloudfunctions文件夹即可【新建Node.js云函数】,新建云函数会默认生成几个文件,我们只需要在index.js中写函数内容即可。


默认生成的index.js

如果需要操作数据库则需要声明


image.png
//云函数主体
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()  //获取小程序的信息,如OPENID等
  const _ = db.command;
  try {
    return await db.collection('address').add({
      data: {
        userid: wxContext.OPENID,   //用户唯一id从wxContext获取
        name: event.name,   //云函数入参从event传入
        phone: event.phone,
        province: event.province,
        city: event.city,
        district: event.district,
        detail: event.detail,
        isdefault: event.isdefault,
        createTime:db.serverDate()
      },
      success: function(res) { 
      }, fail: err => {
      }
    })
  } catch(e) {}
}
6.上传云函数

写完云函数后需要上传云函数才能在小程序中调用


上传云函数
7.调用云函数
 wx.cloud.callFunction({
      name: 'addcart',   //云函数名字
      data: {
        goodsid: goodsid,  //云函数入参
      },
      success(res) {
        console.log(res)
        Toast.clear();
      },
      fail(err) {
        Toast.clear();
        console.log(err);
        wx.showToast({
          icon: 'none',
          title: '出错啦!请稍后重试'
        })
      }
    })

二、云数据库操作

1.新建数据库
新建集合

云数据库采用的是NoSql,表即是集合


增加一列数据

会自动生成_id作为主键

2.增

不推荐直接在小程序中不通过云函数操作数据库,会有很多限制,(如:查询的条数,直接操作数据库最多只能20条),所以后续的数据库操作都是基于云函数中的。

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 添加商品到购物车
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
    try {
      return await db.collection('cart').add({    //会默认添加_id字段作为主键
        data: {
          userid: wxContext.OPENID,
          goodsid: event.goodsid,
          amount: 1,
          selected: true,
          createTime:db.serverDate()
        },
        success: function(res) {    
        }, fail: err => {
        }
      })
    } catch(e) {
      console.log(e);
    }
}
2.删
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  try {
    return await db.collection('address').doc(event._id).remove({  //根据传入的主键删除
      success: function(res) {     
      }, fail: err => {
      }
    })
  } catch(e) {
    console.log(e);
  }
}
3.改
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 更新收货地址
exports.main = async (event, context) => {
  const _ = db.command;
  try {
    return await db.collection('address').doc(event._id).update({
      data: {
        name: event.name,
        phone: event.phone,
        province: event.province,
        city: event.city,
        district: event.district,
        detail: event.detail,
        isdefault: event.isdefault,
      },
      success: function(res) {
       
      }, fail: err => {

      }
    })
  } catch(e) {
    console.log(e);
  }
}
4.查
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 获取当前用户的地址
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const _ = db.command;  //引入查询指令
  try {
    return await db.collection('address').where({
      userid: _.eq(wxContext.OPENID)    //eq查询指令 表示等于
    }).orderBy('createTime','desc').get()   //按时间排序
  } catch(e) {
    console.log(e);
  }
}

limit(10) 表示取前10条数据 加在get前
支持的查询指令
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/query.html

5.多表查询
 return await db.collection('cart').aggregate()
    .match({
      userid: wxContext.OPENID,
      selected: true
    }).lookup({
        from: 'goods',   //关联的表名
        localField: 'goodsid',  //关联表名的字段
        foreignField: '_id',   //源表的字段
        as: 'info'   //组装成的对象
      }).end()

注:where()和aggregate()不能共存,where()最后接get(),aggregate()最后接end()

6.模糊查询
db.collection('goods').where(_.or([  //or表示接受多个查询条件
{
      name: db.RegExp({       //模糊查询   
        regexp: '.*' + event.name,
        options: 'i',
      })
    },
    {
      subtitle: db.RegExp({  //组装成正则
        regexp: '.*' + event.name, // 正则表达式,字符串形式
        options: 'i',   //表示忽略大小写
      })
    }
    ])).get()
7.分页查询
db.collection('todos').skip(10)   //指定查询返回结果时从指定序列后的结果开始返回
  .get()
  .then(console.log)
  .catch(console.error)

三、对接腾讯云短信服务

腾讯短信服务控制台 https://console.cloud.tencent.com/smsv2
短信Api https://cloud.tencent.com/document/product/382/38778
(控制台里面居然找不到api的入口)

短信介绍


进入接口调试页面 image.png

在腾讯云控制台找到对应的参数,添加,然后在线调用成功之后就可以直接复制代码

测试的时候需要在本地安装一下依赖,右键云函数文件夹->在外部终端窗口打开-> 运行 npm install tencentcloud-sdk-nodejs --save 即可,上传云函数时,依然可以选择云端安装依赖

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

const tencentcloud = require("tencentcloud-sdk-nodejs")


// 短信通知下单信息
exports.main = async (event, context) => {
  const SmsClient = tencentcloud.sms.v20190711.Client;
  const clientConfig = {
    credential: {     //api的秘钥id和密码    https://console.cloud.tencent.com/cam/capi  中生成
      secretId: "",     
      secretKey: "",
    },
    region: "",
    profile: {
      httpProfile: {
        endpoint: "sms.tencentcloudapi.com",
      },
    },
  };
  
  const client = new SmsClient(clientConfig);
  const params = {
      "PhoneNumberSet": [    //发送的号码
          "86187xxxxxxxx"     //国内的号码需要加 86
      ],
      "TemplateParamSet": [  //发送的参数 对应模板中的{1} {2}
          " ",
          " "
      ],
      "TemplateID": "xxx",    //短信模板ID
      "SmsSdkAppid": "xxxx",   //SDKAppID  在短信的应用列表中获取   https://console.cloud.tencent.com/smsv2/app-manage
      "Sign": "xxx"    //短信签名内容  即模板中【】中的内容
  };
  client.SendSms(params).then(
    (data) => {
      console.log(data);
      return data
    },
    (err) => {
      console.error("error", err);
      return err
    }
  );
}

四、云开发的优缺点

优点:利用云函数可以很轻松的获取用户OPENID,操作数据库这些,省了https配置。
缺点: 云函数访问速度很慢,不知道等5g普及之后会不会改变

最后,云小程序有提供CMS,还没用过,不知道好不好用。

相关文章

  • 云开发踩坑

    主要重点介绍小程序云开发步骤、云数据库操作、云函数对接腾讯短信服务 一、云开发步骤 1. 新建云开发小程序 app...

  • Android 日常踩坑

    1、Android NDK开发踩坑 踩坑环境 Android Studio 3.4.1,JDK 1.8 1、为什么...

  • Flutter 开发记录

    Flutter 开发踩坑记录(干货总结)

  • 开发踩坑

    今天在做美团的二级菜单的时候, 使用了一种很原始的方式, 在 li 下直接添加一个 div , 当鼠标 hover...

  • Windows下GithubPages博客快速搭建

    Windows下开发坑总是比较多的,但是本人没Mac,只好踩一遍坑记录下。本文主要是安装过程&踩坑记录,故不对细节...

  • 【Flutter】阿里云号码认证一键登录

    项目环境是flutter开发的,然而阿里云官网并没有flutter相关的SDK,所以选择了集成的插件,这里踩过的坑...

  • Android零散技术点

    Android BLE 蓝牙开发入门 逐步指导新手进行 Android ble 蓝牙的开发,避免踩坑。Androi...

  • web开发踩坑

    记录1 记录2

  • 开发踩坑经验

    开个系列文章,记录自己在日常工作中的踩坑经验,学习和总结如何用正确的姿势做事情。 2017.12.13 问题描述:...

  • Android开发踩坑

    Android颜色值所支持的4个格式 Android中颜色值是通过红(Red)、绿(Green)、蓝 (Blue)...

网友评论

      本文标题:云开发踩坑

      本文链接:https://www.haomeiwen.com/subject/ggznsktx.html