【个人随笔仅供参考,如有出错欢迎批评】
云开发微信小程序
开发环境搭建
-
申请账号,获取AppID
-
小程序代码构成
JSON配置,WXML模板,WXSS样式,JS逻辑交互 -
云函数初始化
- 新建文件夹cloud(同于存放云函数)
- 在project.config.json中添加配置
"cloudfunctionRoot": "cloud/"
- 在app.js文件中的onLaunch(){}函数中添加配置 (云开发环境初始化)
wx.cloud.init({env:"环境ID,点击云开发可查看"})
云函数
我觉得需要用到云函数的情况:
- 数据库访问权限。在前端js直接对数据库操作会有权限(也可以修改数据库的访问权限来解决),而把操作写到云函数再调用就无敌。
- 数据库请求数量。在前端js直接对数据库get()操作时,最多返回20条数据;而把操作写到云函数再调用可以超过20条,如果发现还是不行的话,看看是不是漏掉.limit(value: number)。
【注意】
微信开发文档:Collection.limit
- Collection.limit(value: number) 在小程序端默认及最大上限为 20,在云函数端默认及最大上限为 1000
微信开发文档:Aggregate.limit - Aggregate.limit(value: number) 无具体说明,但是我开发过程中,在云函数端不写.limit最多返回20条,所以想要返回超过20条就.limit(大于20的数)
云函数创建和使用步骤
- 在cloud文件夹中新建Node.js,如:example
- 在example文件夹下的index.js中的入口函数写具体实现,其中event为传进来的参数对象
如:想要获取openid时,直接event.openid - 编写完云函数后,右键”上传并部署:安装云端依赖“
- 如何调用云函数?
如:在pages/index/index.js中
wx.cloud.callFunction(){
name:"云函数名example"
data:{
openid:"",
xxxxxx: ,
}//data{}即云函数中的对象event{}
}
云数据库
增删改查
云存储
用于存储文件、音频、视频
其他问题
基本表随机抽取元组
wx.cloud.database().collection("基本表名").aggregate().sample({
size:
}).end()
//aggregate():聚合操作
//aggregate().sample(size: number):随机从文档中选取指定数量的记录。
产生随机数
var random=Math.ceil(Math.random()*(size+1))
//Math.random()∈(0,1)
//Math.ceil():向上取整
//所以,random∈[0,size]
倒计时
data{
second:0//秒数
size://时间长度
timer:'',//定时器的编号,setInterval()返回值
},
countDown () {
this.setData({
second:this.data.time,
timer: setInterval(this.func, 1000)//1000是时间间隔number delay,单位ms
})
},
func(){
this.setData({
second: --this.data.second
})
if (this.data.second == 0) {
clearInterval(this.data.timer);
}
},
//setInterval(func,number delay):生成定时器
//clearInterval(timer):取消定时器
setData{}给对象数组赋值
data{
items:[{id:'',name:''},{id:'',name:''}]
}
//1.先写好string(如果下标不是变量,可以直接第2步)
let string='items['+变量下标index+']'
//2.setData
this.setData{
[string]:{id:'',name:''},
['items[0]']:{id:'',name:''}
}
页面跳转
我在项目开发中常用到的几种页面跳转:
- wx.navigateTo
保留当前页,不能跳到tabbar页面,使用wx.navigateBack可返回原页面。页面栈最多十层,适用于页面不多的小程序 - wx.redirectTo
关闭当前页。返回原页面时需要重新加载,适用页面多的小程序。 - wx.reLaunch
与wx.redirectTo基本相同,只是会先关闭所有保留页面再跳转
生成菊花码
项目要求班级二维码,找资料也没找到封装好的生成二维码的api,所以改用菊花码(也就是小程序码)
- 写在云函数文件里
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
try {
// 方法调用
const wxacodeResult = await cloud.openapi.wxacode.getUnlimited({
page: event.page, // 页面路径
scene: event.scene, // page后面跟的参数写在scene中
})
if (wxacodeResult.errCode != 0) {
// 生成二维码失败,返回错误信息
return wxacodeResult;
}
// 上传到云存储
const uploadResult = await cloud.uploadFile({
cloudPath: 'QR/' + event.scene + '.jpg',//按理说用时间戳new Date().getTime()作为唯一标识,这里我用的是班级邀请码(一串数字)
fileContent: wxacodeResult.buffer,
});
if (!uploadResult.fileID) {
//上传失败,返回错误信息
return uploadResult;
}
// 获取图片临时路径
getURLReault = await cloud.getTempFileURL({
fileList: [uploadResult.fileID]
});
fileObj = getURLReault.fileList[0];
fileObj.fromCache = false;
// 上传成功,获取文件临时url,返回临时路径的查询结果
return fileObj;
} catch (err) {
return err
}
}
- 然后在前端js调用该函数就可以啦
var random = Math.floor(Math.random() * 1000000000);//作为邀请码
wx.cloud.callFunction({
name: 'generateQR', // 函数名
data: {
page: 'pages/sMyClass/index',//不填默认主界面index
scene: random,//必填
},
})
ps:传入的page参数必须是已经发布的小程序存在的页面,否则报错
查询表中数组中是否存在某对象
参考文章
例:项目中createClass表中存在属性students数组,想要查询该students数组是否存在某学生
let db=wx.cloud.database()
let _=db.command
let studentList=db.collection("createClass").where({
classCode:classCode,
students:_.in(openid)
}).get()
if(studentList.data.length!=0){
//该学生已存在
}else{
//该学生不存在
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通