posts - 1,  comments - 0,  views - 34

【个人随笔仅供参考,如有出错欢迎批评】

云开发微信小程序

开发过程中看的文章
开发过程中看的B站视频

开发环境搭建

微信开发文档

  1. 申请账号,获取AppID

  2. 小程序代码构成
    JSON配置,WXML模板,WXSS样式,JS逻辑交互

  3. 云函数初始化

    1. 新建文件夹cloud(同于存放云函数)
    2. 在project.config.json中添加配置
      "cloudfunctionRoot": "cloud/"
    3. 在app.js文件中的onLaunch(){}函数中添加配置 (云开发环境初始化)
      wx.cloud.init({env:"环境ID,点击云开发可查看"})

云函数

我觉得需要用到云函数的情况:

  1. 数据库访问权限。在前端js直接对数据库操作会有权限(也可以修改数据库的访问权限来解决),而把操作写到云函数再调用就无敌。
  2. 数据库请求数量。在前端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的数)

云函数创建和使用步骤

  1. 在cloud文件夹中新建Node.js,如:example
  2. 在example文件夹下的index.js中的入口函数写具体实现,其中event为传进来的参数对象
    如:想要获取openid时,直接event.openid
  3. 编写完云函数后,右键”上传并部署:安装云端依赖“
  4. 如何调用云函数?
    如:在pages/index/index.js中
	wx.cloud.callFunction(){
		name:"云函数名example"
		data:{
			openid:"",
			xxxxxx: ,
		}//data{}即云函数中的对象event{}
	}

云数据库

增删改查

云存储

用于存储文件、音频、视频

其他问题

基本表随机抽取元组

微信开发文档:Aggregate.sample

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,所以改用菊花码(也就是小程序码)

  1. 写在云函数文件里
// 云函数入口文件
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
  }
}
  1. 然后在前端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{
      //该学生不存在
    }
posted on   咩野  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示