网络编程 发布日期:2025/11/6 浏览次数:1
背景
最近小程序非常的火,应公司业务发展要求,开发维护了几款小程序,公司开发的小程序都是由后端提供的接口,开发繁琐而复杂,直到小程序出现了云开发,仔细研读了文档之后,欣喜不已,于是我着手开发了本人的第一款小程序
分析
云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
优势
需要解决的问题
数据库切换问题
使用过云开发的人都发现云开发切换数据库环境是最头疼的,如果手动去切换容易搞错,不小心在当前环境修改了线上数据库数据
直到官方出了这个函数问题也就迎刃而解
cloud.updateConfig({
env: ENV === 'local' "htmlcode">
await Taro.cloud.init({
env: `${process.env.NODE_ENV === 'development' "_blank" href="https://github.com/ianstormtaylor/superstruct" rel="external nofollow" >点我查看
详细使用案例见下方代码
函数文件太多的问题
官方和他人教程的例子都是一个文件对应一个云函数,通过开发体验我发现这样做并不好,当项目有多个表的时候,找个函数文件真的太难了
我们可以将一个表的增删改查函数全部写入一个文件中
教程: 首先每个云函数文件中package.json引入superstruct
{
"dependencies": {
"wx-server-sdk": "latest",
"superstruct": "latest"
}
}
以下代码是一个完整的云函数例子
const cloud = require('wx-server-sdk');
const { struct, superstruct } = require('superstruct');
cloud.init();
//小区信息
const Model = () => {
const db = cloud.database();
const _ = db.command;
const collection = db.collection('address');
return {
async add(data) {
try {
data = struct({
name: 'string', //名字
phone: 'string',
unit: 'number', //楼单元号
doorNumber: 'string', //门号
communityId: 'string', //小区id
_openid: 'string' //用户的id
//isDefault: 'boolean' //是否默认地址
})(data);
} catch (e) {
const { path, value, type } = e;
const key = path[0];
if (value === undefined) {
const error = new Error(`${key}_required`);
error.attribute = key;
throw error;
}
if (type === undefined) {
const error = new Error(`attribute_${key}_unknown`);
error.attribute = key;
throw error;
}
const error = new Error(`${key}_invalid`);
error.attribute = key;
error.value = value;
throw error;
}
let res = await this.getList({ _openid: data._openid });
if (res.data.length >= 1) {
return { msg: '当前只支持保存一个地址' };
}
res = await collection.add({
data,
createTime: db.serverDate(),
updateTime: db.serverDate()
});
return res;
},
async getAdressById({ _openid, _id }) {
const user = await collection
.where({
_openid,
_id: _.eq(_id)
})
.get();
return user;
},
//更新指定的id 先判断手机号修改没,没修改直接就改数据,修改过判断一下库中有没有这条数据
async update(data) {
//更新表的操作
},
//删除指定id的shop
async remove({ _id, _openid }) {
//删除表的操作
},
/**
* 获取商列表
* @param {*} option {category 类别, pagenum 页码}
*/
async getList({ _openid }) {
const shopList = await collection
.where({
_openid
})
.get();
return shopList;
}
};
};
exports.main = async (event, context) => {
const { func, data } = event;
const { ENV, OPENID } = cloud.getWXContext();
// 更新默认配置,将默认访问环境设为当前云函数所在环境
console.log('ENV', ENV);
cloud.updateConfig({
env: ENV === 'local' "htmlcode">
wx.cloud.callFunction({
'address', //云函数文件名
data: {
func: 'add', //云函数中定义的方法
data: {} //需要上传的数据
}
});
图片 视频等文件
直接打开云开发控制台选择存储直接上传文件,复制url地址就可以放到代码中使用了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。