概述:
开发者可以用云开发微信小程序和游戏,不用搭建服务器就可以使用云功能。
云开发为开发者提供了完整的云支持,弱化了后端和运维的概念,在不设置服务器的情况下,使用平台提供的API进行核心业务开发,可以快速启动和迭代。同时,这种能力与开发人员已经使用的云服务兼容,而不是相互排斥。
目前,它提供三种基本的容量支持:
云功能:运行在云端的代码,微信私有协议自然认证,开发者只需要编写自己的业务逻辑代码数据库:一个可以在小程序前端操作、在云端读写的JSON数据库存储功能:直接在小程序前端上传/下载云文件,在云开发控制台可视化管理中创建项目:
为新项目选择一个空目录,填写AppID(使用云开发能力时必须填写AppID),勾选创建“云开发快速启动项目”,点击“创建”即可获得展示云开发基本能力的样例小程序。
项目结构如下:
开放云服务:
点击云开发,打开云开发控制台,提供如下功能(数据库在云功能中的操作相当于数据库在控制台中的直接操作)
概述:查看云开发用户管理的基本使用数据:查看小程序用户信息数据库:管理数据库,可以查看、添加、更新、查找、删除数据、管理索引、管理数据库访问权限等。存储管理:查看和管理存储空间云功能:查看云功能列表、配置、日志和监控统计分析:查看云开发资源具体使用情况统计的基本方法(基本涵盖了小程序云开发中常用的定义和方法)37870.87777779996
小程序调用云函数:的例子
//以回调方式调用wx . cloud . call function({//要调用的cloud function name : ' add ',//参数data:传递给cloud data: {x: 1,y: 2,},success : RES={//output : RES . result===3 },fail: err={ //handle error },Complete3360 ()={//.}})//promise style调用wx.cloud.callFunction({ //要调用的cloud function的名称为:' add ',//事件参数data3360传递给cloud data: {x: 1,Y: 2,})。然后(RES={//output:res。结果===3})。catch (err={//handleerror})小程序调用数据库:的示例
//1.获取数据库引用const db=wx.cloud.database()//2。构造查询语句//collection方法获取集合的引用where方法传入一个对象,数据库返回集合中字段等于指定值的JSON文档。该API还支持高级查询条件(如大于、小于、in等。).有关详细信息,请参见文档查看支持列表。get方法将触发网络请求。从数据库db.collection ('books ')获取数据。其中({ publish info : { country : ' us ' } })。get({ success : function(RES){//Output[{ ' title ' : '麦田里的守望者',}] console.log (RES)}})小程序存储调用示例:
//让用户选择一张图片wx . choose image({ success : choose result={//将图片上传到云存储空间wx.cloud.uploadFile({//指定上传到的云路径:cloudPath: 'my-photo.png ',//指定要上传文件的applet临时文件路径file path : choose result . tempfile path[0],//成功回调success3360res={console.log('上传成功',res)},},
//index.js是入口文件,调用cloud函数时会执行这个文件导出的main方法。//事件包含调用此函数时调用方(applet)传递的参数。同时还包含了用户登录状态‘openId’和小程序‘appId’的信息,可以通过getWXContext方法获取。const cloud=require(' wx-server-SDK ')exports . main=(event,context)={const {userinfo,A,b}=eventconst {openId,appid }=cloud . getwxcontext()//这里得到的openId和appId是可信的const sum=a breturn {OpenID,appId,sum}}来操作cloud函数中的数据库
下面的调用获取对默认环境的数据库的引用:
const cloud=require(' wx-server-SDK ')cloud . init()const db=cloud . database()如果有一个名为test的环境,可以通过如下方式获取测试环境数据库:
const cloud=require(' wx-server-SDK ')cloud . init()const testdb=cloud . database({ en v : ' test ' })也可以通过init传递到默认环境中,这样在获取数据库时将使用默认环境数据库:
const cloud=require(' wx-server-SDK ')cloud . init({ en v 3360 ' test ' })const testdb=cloud . database()操作集:
const cloud=require(' wx-server-SDK ')cloud . init()const db=cloud . database()const todos collection=db . collection(' todos ')//get todos collection cloud开发实践:
(使用小程序云开发并实现一个可以添加、删除、修改和检查的设备管理平台)
1:需求分析:
设备管理状态:部门有大量安卓/苹果测试机和测试硬件设备,目前管理状态混乱。管理员每次使用纸质表格和excel记录贷款情况。同事需要测试设备时,需要联系管理员,管理员查阅表格,找到最后一个借用人进行协调。而注册在管理痛点:的管理员需要通过阅读借阅记录表来了解设备现状,协调资源,增加工作量,普通员工无法了解设备借阅现状,且设备的获取比较繁琐;考勤管理状态:管理员通过excel表格汇总考勤状态,逐月发送到员工邮箱。员工需要下载csv文件查看考勤管理痛点:对于员工来说,不方便查看excel的需求汇总:普通员工通过查看设备状态找到可以处于状态的设备,并向管理员报告。管理员通过小程序切换设备状态和绑定用户。管理员逐月导入考勤数据,员工可以通过小程序查看个人考勤;2:项目建设
ui库使用iview weapp小程序(前端)严格按照控制台中配置的权限操作数据库,而云功能拥有所有权限(云功能中的数据库操作等同于云开发控制台中的数据库操作),因此本项目中的所有数据库操作都将在云功能中处理,小程序仅作为视图层,未授权的接口和操作将被可视化隔离:建立集合。
通过云功能控制台创建需要的集合,将excel/json文件导入到对应的集合中,或者直接手工创建
实现4:核心功能(主要是云功能运营数据库)
applet app.js
初始化云功能,获取授权用户信息,定义需要的全局数据
//app . jsapp({ onlunch : function(){ const _ this=this//初始化云函数if(!Wx.cloud) {console.error('请使用2.2.3或更高版本的基本库来使用cloud功能')} else { wx . cloud . init({ trace user : true,})}//获取用户信息(对于授权用户,直接获取用户信息)wx . getsetting({ success 3360 RES={ if(RES . authsetting[' scope . user info ']))){//已经授权,可以直接调用getUserInfo来获取头像昵称。不会播放盒子wx . getuser info({ success : RES={_ this . global data . avatar URL=RES . user info . avatar URL _ this . global data . user info=RES . user infoif(_ this . useri)NFO回拨){ _ this。userinfocallback ()}}})})这。globaldata={ userinfo: {、//微信用户信息userRole: ' '、//当前用户角色为registerUser: {}、//微信用户绑定的用户信息为userindex3360 ' '、//编辑设备和添加设备页面,索引选择的值为nameuserindex: ' '、//编辑设备和添加设备页面,索引选择的值id为current querys : { type :[' iphone ','
以applet open_id为查询条件,在云函数用户集中查找绑定到open_id的数据。如果为空,则表示微信账号没有绑定用户名。
//云函数入口文件const cloud=require(' wx-server-SDK ')cloud。init()//云函数入口函数exports.main=async(事件,上下文)={ const wxContext=cloud。getwxcontext()//调用数据库获取所有设备列表const db=cloud.database() //获取数据库const _=db.command //获取查询指令const用户集合=db。集合('用户')//获取用户集合const user=(等待用户提示。其中({ open _ id : Wxcontext .OPENID //根据唯一open_id在用户集合中查找已绑定的用户}).get())返回{事件,数据:用户,openid: wxContext .OPENID,appid: wxContext .APPID,unionid: wxContext .UNIONID,}}云函数寄存器(云函数修改数据库数据)
对于未绑定的微信号,需要将用户选中的用户名与当前微信open_id绑定,完成注册
//云函数入口文件const cloud=require(' wx-server-SDK ')cloud。init()//云函数入口函数exports.main=async(事件,上下文)={ const wxContext=cloud。getwxcontext()//调用数据库获取所有设备列表const db=cloud.database() //获取数据库const _=db.command //获取查询指令const用户集合=db。集合('用户')//获取用户集合//查询条件让查询=_。eq(事件。id)//尝试{ await userclection。doc(事件。id ).更新({ //数据传入需要局部更新的数据数据: { open _ id : Wxcontext .OPENID } })} catch(e){ console。日志(e)返回{事件,openid: wxContext .OPENID,appid: wxContext .APPID,unionid: wxContext .UNIONID,}}云函数getEquipmentList(云函数查询全部数据,云函数按条件查询数据库)
获取设备数据的时候存在多种情况
获取全部数据: 由于获取数据库有100条上限的限制,需要进行特殊处理按条件查询数据: 需要提前拼接好查询语句//云函数入口文件const cloud=require(' wx-server-SDK ')cloud。init()//云函数入口函数exports.main=async(事件,上下文)={ const wxContext=cloud。getwxcontext()//调用数据库获取所有设备列表const db=cloud.database() //获取数据库const _=db.command //获取查询指令常量设备集合=db。集合('设备')//获取装备集合//取所有集合中符合条件的数据(因为有默认极限100条的限制,需要做特殊操作)const MAX_LIMIT=100 //先取出集合记录总数const countResult=等待设备收集。count()const total=counts sult。总计/计算需分几次取const batchTimes=Math.ceil(总计/100) //承载所有读操作的承诺的数组const tasks=[] let query={} //封装设备类型查询条件(直接通过减少直接拼接方法)查询。eq _ type=事件。querylist[' type '].reduce((acc,cur)={ if(!acc) { return _ .eq(cur) } else { return acc.or(_).eq(cur)) } },null) //用户名查询条件if(事件。querylist[' user ']。长度0){查询。eq _ user=事件。的querylist[' user '][0]}(让I=0;i batchTimesI){ const promise=装备收集。哪里(查询)。跳过(i * MAX_LIMIT).极限(最大极限)。get() tasks.push(promise) } //等待所有数据读取完成const设备列表=(等待承诺任务))。reduce((acc,cur)=({ data : ACC。数据。concat(cur。data),errMsg: acc.errMsg,})返回{事件,数据:设备列表,openid: wxContext .OPENID,appid: wxContext .APPID,unionid: wxContext .UNIONID,}}云函数移除设备(云函数删除集合数据)
//云函数入口文件const cloud=require(' wx-server-SDK ')cloud。init()//云函数入口函数exports.main=async(事件,上下文)={ const wxContext=cloud。getwxcontext()//调用数据库获取所有设备列表const db=cloud.database() //获取数据库const _=db.command //获取查询指令常量设备集合=db。集合('设备')//获取装备集合请尝试{等待设备收集。doc(事件。id ).remove()} catch(e){ console。错误(e)}返回{事件,openid: wxContext .OPENID,appid: wxContext .APPID,unionid: wxContext .UNIONID,}}项目截图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。