微信小程序学习
学习微信小程序官方提供的模板,并尝试写一个微信小程序
云开发的结构
微信小程序云函数的使用
云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。小程序内提供了专门用于云函数调用的 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) => {
});
}
});