淘先锋技术网

首页 1 2 3 4 5 6 7

微信小程序学习

学习微信小程序官方提供的模板,并尝试写一个微信小程序

云开发的结构

在这是目前我学到的小程序云开发结构

微信小程序云函数的使用

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。小程序内提供了专门用于云函数调用的 API。

开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。

创建云函数

以下为微信小程序提供的模板,其中quickstartFunctions是云函数名称,这个文件夹下的index.js是这个云函数的执行文件。
在这里插入图片描述
以下为一个云函数的index.js文件内容,调用云函数执行的也是这个文件(微信小程序提供的例子),根据事件的type属性,确定执行的具体的js文件。

// 定义变量,每一个变量引用一个js文件
const getOpenId = require('./getOpenId/index');
const getMiniProgramCode = require('./getMiniProgramCode/index');
const createCollection = require('./createCollection/index');
const selectRecord = require('./selectRecord/index');
const updateRecord = require('./updateRecord/index');
const sumRecord = require('./sumRecord/index');


// 云函数入口函数,根据事件的.type属性,调用不同的js文件
// 这里的event指的是“调用云函数”事件
exports.main = async (event, context) => {
  switch (event.type) {
    case 'getOpenId':
      // 执行getOpenId中的main函数(exports.main = async(enent, context)=>{} )
      return await getOpenId.main(event, context);
    case 'getMiniProgramCode':
      return await getMiniProgramCode.main(event, context);
    case 'createCollection':
      return await createCollection.main(event, context);
    case 'selectRecord':
      return await selectRecord.main(event, context);
    case 'updateRecord':
      return await updateRecord.main(event, context);
    case 'sumRecord':
      return await sumRecord.main(event, context);
  }
};

创建数据库

以下给出了其中一个具体的js文件./createCollection/index.js,用于创建数据库

// const 用于声明变量,必须赋值,赋值后不能更改
// require 用于导入模块
// 此时cloud是一个对象,具有属性和方法(都是微信提前写好的)
const cloud = require('wx-server-sdk');
// 使用了cloud对象中的.init()方法
cloud.init({
  // 使用了cloud对象中的.DYNAMIC_CURRENT_ENV属性,初始化环境变量
  // 调用该云函数时,会访问这个环境
  env: cloud.DYNAMIC_CURRENT_ENV
});
// 使用const 创建了一个数据库对象,对象名称为db
const db = cloud.database();

// 创建集合云函数入口函数,也就是说以下为这个云函数的主体部分
// 只有定义了exports.main函数,这个云函数才能在小程序中被调用
// event指的是事件,这里指的是“该云函数被调用”的这个事件
// asyns()专门用于创建异步函数
exports.main = async (event, context) => {
  try {
    // 创建集合
    await db.createCollection('sales');
    // 给集合添加记录
    await db.collection('sales').add({
      // data 字段表示需新增的 JSON 数据
      // data是db的一个属性
      data: {
        region: '华东',
        city: '上海',
        sales: 11
      }
    });
    return {
      success: true
    };
  } catch (e) {
    // 这里catch到的是该collection已经存在,从业务逻辑上来说是运行成功的,所以catch返回success给前端,避免工具在前端抛出异常
    return {
      success: true,
      data: 'create collection success'
    };
  }
};

调用云函数

创建了云函数,下面讲解如何调用云函数。

// index.js
// const app = getApp()
const { envList } = require('../../envList.js');

Page({
  // 因为与该节无关,内容全部删除
  data: {
},
  // 定义函数,参数powerlist为已定义变量,与本节内容无关
  onClickDatabase(powerList) {
    // 显示 loading 提示框。需主动调用 wx.hideLoading 才能关闭提示框
    // title:''中的内容为提示框中的内容
    wx.showLoading({
      title: '',
    });
    // 调用云函数
    wx.cloud.callFunction({
      // 云函数名称
      name: 'quickstartFunctions',
      // 局部覆写 wx.cloud.init 中定义的全局配置
      config: {
        env: this.data.selectedEnv.envId
      },
      // 传递给云函数的参数
      data: {
        type: 'createCollection'
      }
      // 异步。执行完上步操作后,执行then定义的函数
      // resp指的是上一个事件,也就是“调用云函数”这个事件
    }).then((resp) => {
      // 捕获异常。e指的是异常事件
    }).catch((e) => {
    });
  }
});