评论

小程序端云开发之云函数

小程序云开发之云函数

小程序端云开发之云函数

一、在 app.js 中设置环境初始化

在调用云开发各 API 之前,需要先调用初始化方法 init 一次,全局只需一次,多次调用时只有第一次生效。

onLaunch: function() {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        // 生成环境,换成你的环境ID
        env: 'visit-prod-xxxxxx',
        // 测试环境,换成你的环境ID
        //env: 'visit-xxxxxx',
        // 是否将用户记录到用户管理中,在控制台可见
        traceUser: true,
      })

    }
  },

二、 调用云函数

微信云开发,只提供了 callFunction 一个 api 调用云函数,就是调用云环境中已经部署的函数。里面的各参数定义可以参考微信官方文档,这里列举示例代码:

在云环境中部署的云函数 getBooks,该云函数的功能就是获取书籍列表。

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

cloud.init({
  env: "visit-prod-xxxxxx"
});
const db = cloud.database();
const _ = db.command;
// 云函数入口函数
exports.main = async (event, context) => {
  // 获取Openid
  const { OPENID, APPID, UNIONID, ENV } = cloud.getWXContext();
  // 从小程序端传递过来的参数,可以直接通过event进行读取
  const skip = event.skip;
  // 获取记录总数,查询状态为99或openid为自己的openid
  var bcount = await db
    .collection("books")
    .where(
      _.or([
        {
          status: 99
        },
        {
          openid: OPENID
        }
      ])
    )
    .count();
  // 获取book列表内容
  var bookList = await db
    .collection("books")
    .where(
      _.or([
        {
          status: 99
        },
        {
          openid: OPENID
        }
      ])
    )
    .skip(skip) // 跳过结果集中的前 10 条,从第 11 条开始返回
    .limit(10) // 限制返回数量为 10 条
    .orderBy("weight", "desc")
    .get();
  // 返回记录总数,openid,book列表
  return {
    bcount: bcount,
    openid: OPENID,
    bookList: bookList
  };
};

在小程序端目前支持两种风格调用,一种 Callback 风格,一种 Promise 风格,可以参考官方文档。

假如我在 Index Page 页调用 getBooks 云函数,然后进行渲染,我在 index.js 中的代码示例

// 页面加载时执行
onLoad: function(options) {
    this.getBooks(0)
  },
// 调用云函数
  getBooks:function(skip){
    wx.showLoading({
      title: '加载中...',
    })
    var that = this
    wx.cloud.callFunction({
      // 要调用的云函数名称,和云环境中的函数名称保持一致
      name: 'getBooks',
      // 传递给云函数的event参数,如果有多个,用逗号分隔。
      data: {
        skip:skip
      }
    }).then(res => {
      console.log(res.result)
      wx.hideLoading()
      openid = res.result.openid
      app.globalData.OPENID = res.result.openid
     // 这一步很重要,这里设置了之后,小程序前端页面才能显示。
      that.setData({
        bookList:res.result.bookList.data,
        bcount:res.result.bcount.total
      })
    }).catch(err => {
      // handle
      console.log(err)
      wx.hideLoading()
    })
  },

调用云函数还是很简单的。我在云函数中使用了分页功能,这样可以减少网络的传输,减少延迟。

点赞 1
收藏
评论

2 个评论

登录 后发表内容