当前位置: 首页 > 后端技术 > Node.js

小程序云开发初探

时间:2023-04-03 11:05:31 Node.js

云开发是微信平台新开放的功能,为开发者提供集服务器、数据库、资源存储于一体的云服务。本文将结合官方文档,通过一个小例子来探索云开发的相关功能。云开发官方文档1.新建云开发项目更新微信开发助手新建项目后,选择云开发模板。项目目录项目目录分为2大块:cloudfunctions(云函数)和miniprogram。小程序存放的是和普通开发一??样的业务代码和资源,而cloudfunctions存放的是可以上传到云端的代码,在云开发中称为云函数。云开发模板建立后,会有一些相关的例子来熟悉API。2、控制台微信开发者工具更新后,工具栏上会有一个控制台入口。点击后会出现如下面板,可以查看相关数据。Overview概览界面如上图所示,展示了云开发项目下使用的云资源的统计数据。用户管理所有访问过云项目的用户都会在用户管理下有访问记录。前提是小程序在app.js中设置了traceUser:true,表示允许记录用户信息。wx.cloud.init({env:'...',traceUser:true,})Database数据库是控制台最常用的功能之一。在这个界面下,可以快速建立数据采集,可以理解为数据表。可以在控制台新建一个集合,添加记录有三种方式:控制台手动添加、文件导入、调用api。调用api会自动在每条记录中插入user_openid。存储管理存储管理可以保存小程序端上传的文件,调用api上传。上传名称和路径需要自己定义。CloudfunctionsCloudfunctions管理cloudfunctions中上传的函数,可用于调试和查看调用日志等信息。添加云函数有两种方式,可视化添加和IDE添加,可视化添加的云函数直接上传到云端,IDE中添加需要上传部署后才能调用。如果要删除云函数,在控制台删除后,可以在IDE中同步云函数列表。统计分析统计分析提供有针对性的云服务调用数据。3.环境配置api会自动在每条记录中插入user_openid。项目初始化需要在app.js中配置,env填写自己配置的环境ID。wx.cloud.init({env:'mina-cloud-test001'})4.实际应用本例以上传图书信息作为实际应用,实现基本的图书信息增删改查功能,以及上传和删除图片。读取数据库数据,首先调用wx.cloud.database();获取数据库的所有集合,然后通过查询具体的集合获取数据。constdb=wx.cloud.database();const_=db.command;db.collection('bookList').get().then(res=>{console.log('get',res)self.setData({bookList:res.data});})添加数据constdb=wx.cloud.database();const_=db.command;db.collection('bookList').add({data:{bookMes??:self.data.bookMes??}}).then(res=>{console.log(res)})删除数据db.collection('bookList').doc(id).remove().then(res=>{console.log(res)wx.showToast({title:'删除成功!',})self.getBook();}).catch(err=>{console.log('err',res)})})添加数据constdb=wx.cloud.database();const_=db.command;db.collection('bookList').doc(id).remove().then(res=>{console.log(res)}).catch(err=>{console.log('err',res)})})改变数据constdb=wx.cloud.datab酶();const_=db.commanddb.collection('bookList').doc(self.data.currentId).update({data:{bookMes??:self.data.bookMes??}}).then(res=>{控制台.log('update',res)self.getBook();}).catch(console.error)查询数据&调用云函数查询数据。以云函数为例。首先在云函数中定义查询函数,每个需要调用云开发API的云函数都必须使用wx-server-sdk。创建新的云函数时,项目会提示是否使用依赖。如果是,会自动安装wx-server-sdk函数中的event参数。除了小程序传递的参数外,默认包含userInfo,可用于用户认证操作。//云函数入口文件constcloud=require('wx-server-sdk')cloud.init()constdb=cloud.database()const_=db.command//云函数函数入口exports.main=async(event,context)=>{returndb.collection('bookList').where({'bookMes??.name':_.eq(event.bookMes??.name),'bookMes??.chooseTags':_.in(event.bookMes.chooseTags)}).get({success:function(res){returnres}})}小程序指的是云函数,name是云函数文件夹的名字,data存放的是传给云函数的参数.通过事件获取云函数:wx.cloud.callFunction({name:'searchBook',//传递给云函数的参数数据:{bookMes??:self.data.bookMes??}}).then(res=>{console.log('search',res.result.data)self.setData({bookList:res.result.data})})本文API的使用只是一个例子。实际上服务端的API比小程序端的API要丰富。更多功能。推荐在云函数中设计文件存储、数据库增删改查操作。上传图片上传图片需要先调用wx.chooseImage返回的filePath参数,然后独立定义cloudPath,即上传到云端的地址。choose(){letself=thiswx.chooseImage({count:1,//默认9sizeType:['original','compressed'],//你可以指定原始图像或压缩图像,两者都有sourceTypebydefault:['album','camera'],//可以指定来源是相册还是相机,默认都成功:function(res){//console.log(res.tempFilePaths[0])//返回选择指定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片self.setData({bookPic:res.tempFilePaths[0]})}})},upload(){letself=thisconstfilePath=self.data.bookPicletmyDate=newDate();让时间=''+myDate.getFullYear()+(myDate.getMonth()+1)+myDate.getDate()+myDate.getHours()+myDate.getMinutes()+myDate.getSeconds();constcloudPath='book-image'+time+filePath.match(/\.[^.]+?$/)[0];返回wx.cloud.uploadFile({cloudPath,filePath,}).then(res=>{console.log('upload',res)letbookMes??=self.data.bookMes??;bookMes??.bookPic=res.fileID;返回self.setData({bookMes??});}).catch(err=>{console.log('error',err)})}删除图片删除图片或者其他文件需要一个特定的fileId,可以通过查询得到,通过这个fileID可以删除wx.cloud.deleteFile({fileList:[fileId],成功:res=>{console.log('delete',res.fileList)},失败:err=>{console.log('deleteE',err)}})5.发现存在的问题在实际写例子的过程中,我也发现了一些问题,因为云开发的功能不是很完善,功能也不是很完善。总结发现的一些小问题:数据库暂时不支持模糊查询。数据库集合不能与上传的图片相关联。如果cloudPath与之前的图片一致,则返回结果,虽然实际是成功了,但实际上是换成了之前的旧图片。globalData的定义方式变了,不能和onLaunch同级定义。6.结语关于云开发,官方文档给出了更详细的说明,仔细阅读文档可以更快上手应用。但是目前由于其功能的局限性,不适合比较复杂的公司业务采用这种模式开发,适合个人小企业。以上如有不妥之处,请指出并修改,谢谢!ヾ(=?ω?=)o本文广为宣传,发表于薄荷前端周刊,欢迎关注&星★,转载请注明转载来源。欢迎讨论,点个赞走咯?????~