跳到主要内容

微信小程序云开发初体验

· 阅读需 6 分钟

云开发简单来说是配合微信小程序开发的一个弱后后端逻辑的一个东西,就是你不需要要再招一个 PHP,go,Java 这些程序员,前端就可以搞的,当然前端也需要一定的入门,需要了解非关系数据库中的集合,字段查询等等

了解云开发

云开发提供了 4 大块云端能力

能力作用说明
云函数无需自建服务器在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
数据库无需自建数据库一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库
存储无需自建存储和 CDN在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理
云调用原生微信服务集成基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力

配置云开发环境

基本配置官方介绍的十分详细,建议尽量看官方文章教程入口

以下是我尝试开发的租房小小管家的云开发目录配置,初始化生成的文件我都删掉了,里面这个五个目录都是新增的 WX20191120-1643192x.md.png 每个云函数都需要调用wx-server-sdk这个包,注意需要安装一遍npm install 再全部上传云端,后面就不需要选择全部上传(包含 node_modules)

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

cloud.init({
traceUser: true,
env: 'fast-nav-xxx'
});
// env是你的云开发环境标识

使用用函数调用的好处在于所有鉴权工作都交给了微信去处理,安全且方便,而且比在小程序前端直接调用云 API 权限要高很多,可以直接拿到用户的 openID,所有我推荐这类使用

云函数的简单对接写法

下面是我自己一个云函数写法,因为是第一次也不晓得怎么写比较合理,所有有大神觉得哪里不合理帮我提出来 😆

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

cloud.init({
traceUser: true,
env: 'fast-nav-xxx'
});
const db = cloud.database();
const _ = db.command;
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext();
switch (event.handle) {
case 'get':
return handlerGet(event, context, wxContext);
case 'set':
return handlerSet(event, context, wxContext);
case 'update':
return handlerUpdate(event, context, wxContext);
case 'delete':
return handlerDelete(event, context, wxContext);
}
};

通过函数参数handle控制不同的具体操作接口,参数的话也通过 event.data 拿到,到这来简单的云函数完成,然后鼠标右键上传云端

小程序端的请求调用

首先小程序端 app.js 中需要授权初始化

   /**
* 检查云开发环境并初始化
*/
onLaunch: function() {
if (!wx.cloud) {
console.error('请使用 2.2.3 或以上的基础库以使用云能力');
} else {
//云开发初始化
wx.cloud.init({
env: 'fast-nav-xxx',
traceUser: true
});
}}

小程序端通过 wx.cloud.callFunction方法进行云函数调用请求,我们可以理解为ajax,需要注意的是调整接口的时候就不能去之前xhr里面查看了,需要去cloud分类里面,如下图

WX20191120-1708272x.md.png

下面是我封装的一个简单的接口 API

export const apiCloud = function(name, data = {}) {
return new Promise((resolve, reject) => {
wx.cloud.callFunction({
name,
data,
success: res => {
if (res.errMsg == 'cloud.callFunction:ok') {
resolve(res);
} else {
reject(err);
wx.showToast({
title: err.msg,
duration: 800,
icon: 'none'
});
}
},
fail: err => {
reject(err);
wx.showToast({
title: '请检查网络您的状态',
duration: 800,
icon: 'none'
});
}
});
});
};

调用方式为 apiCloud('house', { handle: 'get', data }),apiCloud 返回的是一个promise对象 可以使用 then-catch 或者 async-await 接收

以上为云开发和小程序端接口交互的一些案例,后面我们再学习一下关于云开发中,查数据库,取集合的操作

gh_225bd06d4e02_258.jpg

欢迎浏览我的小程序:租房小小管家,有问题或者这好的建议请与我联系,留言。