美文网首页
微信小程序笔记六:serverless 云开发

微信小程序笔记六:serverless 云开发

作者: brandonxiang | 来源:发表于2019-05-25 16:13 被阅读0次

    腾讯云提出的云开发应该已经有一段时间。至于serverless是什么?不懂的同学可以移步至phodal大神的serverless。腾讯云借助于小程序快速发展走一波serverless。

    它的优势在于弱化后端和运维概念,让小企业和小团队可以更容易地开发小程序。它首创的云调用将鉴权部分有效的封装,让你的接口很容易的实现了鉴权保护。当然,大公司或者是具有成熟后台团队的公司,肯定不愿意将数据放在腾讯的服务端,而且现在小程序云开发声明收费事宜,具体可以参考配额。以国外的serverless服务的情况来看,都是按流量计费,借于腾讯的流量,云开发所消耗的费用也是一笔不小的数目,当然那也是后话。哪有用别人东西不收费的情况,而且它还是“腾讯”。

    云开发能力从基础库 2.2.3 开始支持(覆盖率 97.3%,查看兼容性问题),所以可以不需要考虑这点兼容性。

    开始前,需要在你的代码库里面新建一个server的文件夹,如果你采用了第三方的框架,请你自行想一下解决方案。开发之前要搞清楚,你的代码是写在server还是写在client里面,分别参考对应服务端API小程序端API。我相信有node开发经验的同学应该很清楚这部分。如果涉及到远程调度的同学,HTTP API 文档则是提供服务端调用的API,远程控制数据库以及数据导出迁移功能。

    在这里,着重介绍一下,云函数和云调用。

    云函数

    云函数是指运行在云端的代码,也就是你server文件夹里面的代码。

    如果你了解不用云开发的openid获取流程,你就知道openid的获取是非常繁琐的过程,前端需要用过wx.login获取一个code值,code值具有时效性。通过code值去后台用appsecret去调取openidsessionkeyunionid的获取就更为复杂。

    但是云函数由于是部署在腾讯云的关系,所以无需维护复杂的鉴权机制,云函数会带上特殊的签名机制,即可获取天然可信任的用户登录态,代码如下,注意node.js的代码使用common.js的模块化方案。

    const cloud = require('wx-server-sdk')
    exports.main = (event, context) => {
      const {userInfo, a, b} = event
      // 这里获取到的 openId 和 appId 是可信的
      const {OPENID, APPID} = cloud.getWXContext() 
    
      const sum = a + b
    
      return {
        OPENID,
        APPID,
        sum
      }
    }
    

    云函数的构建就是前端小程序可以直接通过wx.cloud.callFunction调用。这样,团队内不需要后端工程师以及运维人员。

    // server.js
    exports.main = async (event, context) => ({
      sum: event.a + event.b
    })
    
    // client.js
    wx.cloud.callFunction({
      // 云函数名称
      name: 'add',
      // 传给云函数的参数
      data: {
        a: 1,
        b: 2,
      },
    })
      .then(res => {
        console.log(res.result) // 3
      })
      .catch(console.error)
    

    云调用

    云调用是指需要access token才能调用的供服务端调用的接口,由于access token只有7200秒的有效期,要定时去获取。对于小程序而言,测试和生产如果共用一个小程序,会有冲突的风险。这部分的处理是需要非常小心的。

    云调用的使用则是减轻这些功能的使用难度,无需获取access tokenopenapi的使用让小程序更面向前端,方便前端工程师的开发。下面是关于消息模版推送的代码。在开发之前需要配置一下权限,详情参考

    const cloud = require('wx-server-sdk')
    cloud.init()
    exports.main = async (event, context) => {
        const result = await cloud.openapi.templateMessage.send({
          touser: cloud.getWXContext().OPENID,
          page: 'index',
          data: {
            keyword1: {
              value: '339208499'
            },
            keyword2: {
              value: '2015年01月05日 12:30'
            },
            keyword3: {
              value: '腾讯微信总部'
            },
            keyword4: {
              value: '广州市海珠区新港中路397号'
            }
          },
          templateId: 'TEMPLATE_ID',
          formId: 'FORMID',
          emphasisKeyword: 'keyword1.DATA'
        })
        // result 结构
        // { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }
        return result
    }
    

    相关文章

      网友评论

          本文标题:微信小程序笔记六:serverless 云开发

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