《(本科)第7章微信小程序云开发ppt课件.pptx》由会员分享,可在线阅读,更多相关《(本科)第7章微信小程序云开发ppt课件.pptx(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程主讲人:第7章 微信小程序云开发第第7 7章章 微信小程序云开发微信小程序云开发夏敏捷第第7 7章章 微信小程序云开发微信小程序云开发 7.1 云开发简介云开发简介 7.2 云存储云存储 7.3 云函数云函数 7.4 云数据库云数据库 7.5 云开发综合案例云开发综合案例37.1 云开发简介云开发简介 小程序云开发是一种新的软件开发模式,它弱化了后端以及运维的概念,开发者无需搭建服务器,使用微信平台提供的API即可完成核心的业务开发。开发者只需要使用云调用即可实现和调用服务器端资源一样调用云端资源。7.1.1 小程序新旧模式对比小程序新旧模式对比小程序旧的模式不仅要进行小程序端开发,还有考
2、虑服务器部署与运维、网络安全和网络负载平衡、数据存储和网络合法请求等问题。小程序云开发只需要熟悉小程序原生接口,就可以访问云服务器的一些基本操作,例如数据库操作、文件存储和执行服务器上的云函数。简单总结小程序云开发主要优点是开发简单,几乎不需要进行服务器部署,域名不需要备案,访问的网络也不一定非要支持HTTPS,适合中小型企业,开发成本较低。47.1 云开发简介云开发简介 7.1.2 开通云开发功能开通云开发功能首次使用小程序云开发,需要先开通云开发服务。5云开发控制台是管理云开发资源的地方,控制台提供以下能力: 运营分析:查看云开发监控、配额使用量、用户访问情况。 数据库:管理数据库,可查看
3、、增加、更新、查找、删除数据、管理索引、管理数据库访问权限等。 存储管理:查看和管理存储空间,修改文件的存储权限等。 云函数:查看云函数列表、配置、日志。7.1 云开发简介云开发简介 7.1.3 建立云程序建立云程序小程序云开发必须注册AppID,测试账号没有云开发的功能。打开小程序开发工具,选择新建项目输入项目名称、目录和AppID,后端服务选择“小程序-云开发”,单击“新建”按钮,系统会根据小程序云开发模板创建一个云程序,如图7-5所示。67.1 云开发简介云开发简介对比普通小程序,云开发多了以下设置:(1)文件miniprogramRoot: miniprogram/,cloudfunc
4、tionRoot: cloudfunctions/,上述代码指定小程序源码目录和云函数目录。7(2)app.js文件App( onLaunch: function () if (!wx.cloud) console.error(请使用 2.2.3 或以上的基础库以使用云能力) else wx.cloud.init( env: my-env-id, traceUser: true, ) )env参数决定接下来小程序发起的云开发调用()会默认请求到哪个云环境的资源。traceUser:true语句用于设置访问云项目的用户,会在“云开发控制台”的“用户管理”下记录访问信息。(3)app.json文件
5、云 开 发 能 力 从 基 础 库 2.2.3 开始支持,现在 2.2.3 或以上的基础库已覆盖绝大部分用户,不应继续使用旧的兼容性处理方式。如采用了旧的兼容性处理方式,请在app.json中的增加字段cloud: false。window: ,cloud: false7.2 云存储云存储 云存储提供高可用、高稳定、强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理。 存储管理:支持文件夹,方便文件归类。支持文件的上传、删除、移动、下载、搜索等,并可以查看文件的详情信息。 权限设置:可以灵活设置哪些用户是否可以读写该文件夹中的文件,以保证业务的数
6、据安全。 上传管理:在这里可以查看文件上传历史、进度及状态。 文件搜索:支持文件前缀名称及子目录文件的搜索。 组件支持:支持在image、audio等组件中传入云文件 ID。87.2 云存储云存储 7.2.1 云控制台管理云存储云控制台管理云存储在控制台中,选择存储管理标签页,可以在此看到云存储空间中所有的文件,还可以查看文件的详细信息、控制存储空间的读写权限97.2 云存储云存储 7.2.2 云存储云存储API 云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过API使用云存储功能。1. wx.cloud.uploadFile(Obj
7、ect object)2. wx.cloud.downloadFile(Object object)3. wx.cloud.deleteFile(Object object)4. wx.cloud.getTempFileURL(Object object)107.2 云存储云存储7.2.2 云存储云存储API(1)wx.cloud.uploadFile(Object object)该函数作用是将本地资源上传至云存储空间,如果上传至同一路径则是覆盖。Object参数如表7-1所示。success(res)回调函数res.fileId返回上传至云存储空间的fileId,通过fileId可以访问云存
8、储空间的文件。config参数用来配置云存储环境,填写后忽略init指定的env参数。11字段说明数据类型cloudPath云存储路径,命名限制见文件名命名限制StringfilePath要上传文件资源的路径Stringconfig环境配置Objectsuccess成功回调fail失败回调complete结束回调7.2 云存储云存储12例如,从相册选择一幅图片上传到云存储空间,js代码如下:loadImage:function() wx.chooseImage(/选择图片count:1,sizeType:original,compressed,sourceType:album,camera,s
9、uccess:function(res)wx.showLoading(title:上传中,)constfilePath=res.tempFilePaths0/上传图片constcloudPath=newDate().getTime()+filePath.match(/.+?$/)0 wx.cloud.uploadFile(cloudPath,filePath,success:res=console.log(上传文件成功:,res),fail:e=console.error(上传文件失败:,e)wx.showToast(icon:none,title:上传失败,),complete:()=wx.
10、hideLoading(),fail:e=console.error(e)(1)wx.cloud.uploadFile(Object object)7.2 云存储云存储该函数能够从云存储空间下载文件,Object参数如表7-2所示。success(res)回调函数res.tempFilePath返回下载文件的临时文件路径。13字段说明数据类型fileID待下载云文件IDStringconfig环境配置Objectsuccess成功回调成功回调fail失败回调失败回调complete结束回调结束回调例如通过文件ID下载云存储空间到本地,代码如下所示。 downloadImage:function
11、() /下载图片 var tempPath; let that=this; wx.cloud.downloadFile( /下载文件的fileID success: res = / 获取tempFilePath,并赋值给imgUrl that.setData( imgUrl:res.tempFilePath ) console.log(res) , fail: err = console.error(err) )(2)wx.cloud.downloadFile(Object object)7.2 云存储云存储该函数从云存储空间删除文件,一次最多50个,Object参数列表如表7-3所示。suc
12、cess(res)回调函数res.fileList返回文件列表数组,期中每个元素的fileID是成功删除存储文件的文件ID。 14例如删除两个云存储文件的代码如下:deleteFile:function(e)wx.cloud.deleteFile( fileList:cloud:/teach-2g2kzjxb411e2e2e.7465-teach-2g2kzjxb411e2e2e-1303884781/1.jpg, cloud:/teach-2g2kzjxb411e2e2e.7465-teach-2g2kzjxb411e2e2e-1303884781/5.jpg, success:res= c
13、onsole.log(res.fileList) ) 字段说明数据类型fileList待删除云文件ID列表Stringconfig环境配置Objectsuccess成功回调成功回调fail失败回调失败回调complete结束回调结束回调(3)wx.cloud.deleteFile(Object object)7.2 云存储云存储该函数用云文件ID换取真实链接,公有读的文件获取的链接不会过期,私有的文件获取的链接十分钟有效期。一次最多取50个。 Object参数和表7-3相同,期中fileList表示要换取临时链接的云文件ID列表。success(res)回调函数的res.fileList返回文
14、件列表数组,每个数组元素对象含有fielID,tempFileURL,status,maxAge,errMsg,期中fileID为云文件ID,tempFileURL为临时文件路径,通过此临时链接可以对文件进行不同的处理操作。15例如通过云文件ID换取该文件的真实链接,并在View中显示出来,代码如下:getFileURL:function() var tempPath; let that=this; wx.cloud.getTempFileURL( fileList:cloud:/teach-2g2kzjxb411e2e2e.7465-teach-2g2kzjxb411e2e2e-130388
15、4781/6.jpg, success:res= console.log(res.fileList0.tempFileURL) that.setData( imgUrl:res.fileList0.tempFileURL/通过imgUrl,在view层显示出来 ) )(4)wx.cloud.getTempFileURL(Object object)7.2 云存储云存储 7.2.3 云文件存储使用案例云文件存储使用案例下面以云文件存储4.8节智力测试程序的试题信息。16onShow: function () wx.cloud.downloadFile( fileID: cloud:/xmj-vz
16、x1c.786d-xmj-vzx1c-1302267263/mydata.txt ).then(res = console.log(res.tempFilePath) let fs = wx.getFileSystemManager() let result = fs.readFileSync(res.tempFilePath, utf-8) var dataJSON = JSON.parse(result) /将JSON字符串转换为JSON对象 console.log(dataJSON0.name) /第一题的题目信息 console.log(dataJSON1.content) /第二题的
17、4个选项信息 ) ,7.3 云函数云函数 云函数即在服务器端运行的一段程序代码,一个云函数的写法与一个在本地定义的JavaScript方法无异,代码运行在云端Node.js中。 使用云函数,开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。当云函数被小程序端调用时,定义的代码会被放Node.js运行环境中执行177.3.1 云函数创建和部署云函数创建和部署(1)创建云函数目录18(2)创建云函数在云函数目录上单击鼠标 右 键 , 选 择 “ 新 建Node.js云函数”,输入云函数名称比如“add“,创建的云函数目录下默认有三个文件,con
18、fig.json是配置云函数所要使用的函数接口,index.js是云函数的入口文件,package.json是有关云函数的依赖。(3)上传部署云函数在小程序中调用这个云函数前,我们还需要先将该云函数部署到云端。在云函数目录上右键,在右键菜单中选择“上传并部署:所有文件”或者“上传并部署:所有文件(不上传node_modules)”命令,将云函数整体打包上传并部署到线上环境中。7.3.2 云函数调用云函数调用 小程序创建和部署完毕,在小程序本地或者云端都可以调用云函数,这里举例在小程序本地调用云函数,代码如下: 这里通过callFunction()函数调用云函数,指定函数名为sum,将data数
19、据通过event对象传入函数,函数成功运行,通过res.sum将结果输出。19wx.cloud.callFunction( name:add, data: a:1, b:2 ).then(res= console.log(res.result.sum) ).catch(res= console.log(res.err) )7.3.3 云函数云函数调试调试 1云端测试207.3.3 云函数云函数调试调试212.本地调试勾选“开启本地调试”复选框,第一次开启,会弹出“node modules未安装”提示窗口,这提示开发者要在本地云函数目录下安装Node.js,单击提示窗口中“取消”命令按钮,在小程
20、序开发工具中选择要开启本地调试的云函数目录,选择“在外部终端中打开”,执行npm install命令或者带参数命令npm install -save wx-server-sdklatest,带本地按照依赖按照完成,再次勾选“开启本地调试”复选框,便可开通本地调试。图7-14是触发云函数add时,在本地调试窗口输出的信息。7.3.4 Callback风格和风格和Promise风格风格22(1)Callback风格Callback风格是函数回调编程的一种写法,函数回调就是一个函数A将另外一个函数B作为参数传入,并执行函数B,函数B就叫做回调函数,回调函数通常的一种使用方法是当函数A执行完毕,函数B
21、接收函数A的结果并继续进行操作,例如数据库操作add方法的Callback编程风格:db.collection(student).add( data: xh:101, xm:张三 , success: function(res) / res 是一个对象,其中有 _id 字段标记刚创建的记录的 id console.log(res) , fail: function(err) console.log(err) complete: function() console.log(执行完毕收尾工作) )该方法用来向云数据库插入一条记录,当成功执行,调用success方法,并将执行结果传递给res参数,
22、在success方法中继续执行下一步操作;失败时调用fail方法执行;complete方法不管执行成功与否,都会执行,一般进行一些收尾操作,比如释放某一写对象,关闭数据库等。7.3.4 Callback风格和风格和Promise风格风格(2)Promise风格原生的Promise其实是一个构造函数,接收两个参数,一个resolve(已成功),一个reject(已失败),这两个参数是一个函数,同样返回一个Promise对象,通过对象的.then方法接收resolve方法返回的对象并执行相应的操作,通过.catch方法接收reject方法返回的对象并执行异常处理操作。可以说Promise风格将异步
23、操作通过过链式调用的方法,像流水记账方式一样去解决回调嵌套的问题,解决了Callback回调函数多层嵌套的问题。同样我们以add方法看一下Promise编程风格:db.collection(student).add( / data 字段表示需新增的 JSON 数据 data: xh:101, xm:张三平 ).then(res = console.log(res).catch(err=console.log(err)可以看出Promise风格代码更清楚,更适合异步操作的实现,并且Promise返回的是一个Promise对象,对象是可以保存状态的,所以可以连着写很多的.then()方法来链式的处
24、理操作。237.4 云数据库云数据库云服务器提供数据库操作服务,开发者既可在小程序前端操作,也能在云函数中读写的JSON数据库,该数据库属于文档型数据库,云服务器利用MongDb数据库存储数据。关系型数据库和JSON数据库的概念对应关系如表7-4所示24关系型文档型数据库 database数据库 database表 table集合 collection行 row记录 record / doc列 column字段 field云数据库支持字段类型有:字符串(String)数字(Number)、对象(Object)、数组(Array)、布尔值(Bool)、地理位置点(GeoPoint)、时间(Dat
25、e)、空值(NULL)八种数据类型。 下面以集合student为例讲解利用云开发控制台创建云数据库,student集合含有学号xh,姓名xm和性别xb和年龄age四个字段。 通过云开发控制台,开发者可以创建集合,删除集合,对记录进行增删改成操作,对记录进行导入和导出操作,还可以对数据权限进行设置257.4.2 插入数据插入数据26小程序端插入数据方法:insert:function(e) const db=wx.cloud.database( env:teach-2g2kzjxb411e2e2e ) const collection=db.collection(student) collect
26、ion.add( /要增加的数据 data: xh:107, xm:王莹, xb:女, age:20 ).then(res=console.log(res) /插入成功处理操作 .catch(err=console.log(err) /插入失败处理操作7.4.2 插入数据插入数据云函数插入数据方法:cloud_insert:function(e) const cloud = require(wx-server-sdk) /请求云端库 cloud.init( /初始化 env: cloud.DYNAMIC_CURRENT_ENV /可以写实际要操作云环境id,如teach-2g2kzjxb411
27、e2e2e ) const db = cloud.database() /获取云端数据库 const collection=db.collection(student) /获得student集合 exports.main = async (event, context) = try 27 return await collection.add( / data 字段表示需新增的 JSON 数据,实际开发数据有event参数传入 data: xh: 106, xm: 潘胜利, xb:男, age:19 ) catch(e) console.error(e) 7.4.3 查询数据查询数据Collec
28、tion对象提供get方法和doc方法用来查询数据,doc方法每次查询一条指定的记录,get方法可以批量查询数据,经常和where方法配合使用批量有条件的查询记录。例如查询student集合所有记录,小程序端代码如下: query:function(e) const db=wx.cloud.database( env:teach-2g2kzjxb411e2e2e ) const collection=db.collection(student) collection.where(_openid:openid1).get() .then(res=console.log(res) .catch(e
29、rr=console.log(err) 287.4.3 查询数据查询数据云函数实现方法如下: const cloud = require(wx-server-sdk) /请求云端库 cloud.init( /初始化 env: cloud.DYNAMIC_CURRENT_ENV /可以写实际要操作云环境id,如teach-2g2kzjxb411e2e2e ) const db = cloud.database() /获取云端数据库 const collection=db.collection(student) /获得student集合 exports.main=async(event,conte
30、xt)= return await collection.get() /返回查询结果 297.4.3 查询数据查询数据云数据库查询操作限定,通过小程序端每次最多查询20条记录,通过云函数查询数据最多有1000条记录。这是因为全量查询速度比较慢,再者小程序传说数据有大小限制,所以查询结果有记录数限制。如果查询数据比较多,可以通过分页操作实现 30page_query:function(e) const db=wx.cloud.database( env:teach-2g2kzjxb411e2e2e ) const collection=db.collection(student) var tas
31、ks = var MAX_LIMIT=20 var pageCount collection.count() .then(res=const total=res.total / 计算页数 pageCount = Math.ceil(total / MAX_LIMIT) / 将每一页记录加入tasks数组 for(let i = 0; i tasks.push.apply(tasks,res.data) console.log(tasks) ) .catch(err=console.log(err) 7.4.4 修改数据修改数据通过update和set两个方法修改数据,set方法是覆盖更新数据,
32、也就是集合中有数据则更新相应的数据,没有数据则插入数据。利用update方法将所有女生的年龄-1岁,云函数实现修改数据代码如下: 31 const cloud = require(wx-server-sdk) cloud.init( env: cloud.DYNAMIC_CURRENT_ENV ) const db = cloud.database() const collection=db.collection(student) const _ = mand /获取数据库操作符 exports.main = async (event, context) = try return await
33、db.collection(student).where( xb:女 ) .update( data: age: _.inc(-1) /inc方法将该字段自增-1 , ) catch(e) console.error(e) 7.4.5 删除数据删除数据 通过Collection对象的remove方法可以删除多条数据,注意删除多条记录时,只支持通过匹配 where 语句来删除,不支持 skip 和 limit。只想删除一条记录可以通过Document对象的remove方法来删除一条记录。比如删除所有的男生信息,云函数实现代码如下:32 const cloud = require(wx-serve
34、r-sdk)cloud.init( env: cloud.DYNAMIC_CURRENT_ENV)const db = cloud.database()const collection=db.collection(student)exports.main = async (event, context) = try return await collection.where( xb:男 ).remove() catch(e) console.error(e) 7.4.5 删除数据删除数据通过查询数据执行的remove()方法只能用在云函数服务器端,小程序批量删除可以通过查询,然后通过Docum
35、ent对象的remove()方法逐条删除,代码如下: 执行的时候有时候会出现异常,提示部分记录不能够删除,不具有写的权限,这是因为用户权限受限,可以修改数据权限为自定义规则为read:true,write:true,即所有用户都可以读和写数据的权限。 对数据的操作,建议使用云函数的来实现,因为云函数默认具有管理数据的最高权限。33const db=wx.cloud.database( env:teach-2g2kzjxb411e2e2e )const collection=db.collection(student)collection.where(xb:女).get() .then(res=
36、 for(let i=0;iconsole.log(res) ) .catch(err=console.log(没有相关数据可删除)7.5 云开发综合案例云开发综合案例 本章以大学生问卷调查为例,介绍微信小程序云开发的方法。在系统设计的时候,尽量多使用微信小程序的组件、小程序API函数和小程序云端API函数,已达到综合训练使用微信小程序云开发开发小程序的目的。347.5.1 需求分析需求分析 高校经常对大学生做一些调查问卷,以了解学生的学习目的、学习态度、消费情况、就业意向和心理健康水平等,以便更好的了解学生情况,及时加以引导并改进教育教学方法。大学生问卷调查主要是方便教师管理问卷调查,发布启
37、用问卷调查,统计调查结果;学生通过小程序做问卷调查,查看历史记录等功能。系统涉及教师和学生两种角色,其用例图如图7-18所示。7.5.2 总体设计总体设计35各功能模块介绍:(1)登录:用户通过账号和密码登录系统。(2)完善信息:初次登录,需要完善个人基本信息。(3)问卷调查:学生做调查问卷(4)历史问卷:显示已经做过的问卷调查。(5)添加问卷:教师添加调查问卷名称。(6)添加题目:添加调查问卷内容。(7)修改问卷:对未启用的问卷进行修改。(8)启停问卷:启用或者停用调查问卷。(9)调查统计:对问卷调查进行统计分析。(10)用户管理:添加删除修改用户信息,重置用户密码。7.5.3 系统实现系统
38、实现-集合设计集合设计 根据系统需要,该系统设计users、basedata、subject和answer四个集合36字段数据类型说明_idString编号,自动生成_openidString操作者openidacademyString所在学院accountString教师工会或者学生学号pswString用户密码birthdayString出生日期class或departString学生班级或者教师所在部门nameString学生姓名pictureString用户照片sexString性别typeNumber用户类型,1是教师,0是学生verifyBoolean是否完善信息其json格式如下
39、:_id: e62469b25fcf4664011eb6800e535178 ,_openid:oC9zG5UZKMlMq9-gBCNeBqQ7vABU,birthday:2021-10-27,class:计科201班,name:王海,picture:cloud:/teach-2g2kzjxb411e2e2e.7465-teach-2g2kzjxb411e2e2e-1303884781/101.jpg,psw:999,sex:女,type:0.0,account:104,academy:计算机学院_id:e62469b25fcf4664011eb6800e535178,account:104,
40、name:王海,type:1.0,_openid:oC9zG5UZKMlMq9-gBCNeBqQ7vABU,psw:1234567.5.3 系统实现系统实现-集合设计集合设计(2)basedata集合是存储系统基础信息,如学院、班级、部门。表结构如表7-6所示。37字段数据类型说明_idString编号,自动生成academyArray学院信息classArray班级信息departArray部门信息其json格式如下:_id:d782d4875f94e08e0192b5584a85b974,academy:计算机学院,信息工程学院,class:计科201班,人工智能201班,depart:计
41、算机基础,网络安全7.5.3 系统实现系统实现-集合设计集合设计(3)subject集合存放问卷内容,表结构如表7-7所示。38字段数据类型说明子字段_idString编号,自动生成availableString启用否createdateString创建日期subjectnameString问卷名称subjectdescribeString问卷描述timuObject问卷内容属性数据类型说明bhString编号stemString题目ASring选项ABSring选项BCSring选项CDSring选项D其json格式如下:_id:0bcbdde05fbe4750004b95b91f2419c
42、0,_openid:oC9zG5UZKMlMq9-gBCNeBqQ7vABU,available:1,createdate:2020/11/25,subjectname:12月份调查,subjectdescribe:为了能够了解我校大学生的生活状况,为学校领导的决策提供依据,我们将对您的回答保密。请您如实填写,谢谢合作!,timu:A:大学就是玩的,混混就过去了。,B:为了实现父母的愿望,C:好好学习,实现自己的理想,D:拿到文凭,毕业好找工作,bh:1,stem:您还记得刚进入大学时是抱着什么样的心态吗?7.5.3 系统实现系统实现-集合设计集合设计39(4)answer集合存放问卷内容,表
43、结构如表7-8所示字段数据类型说明子字段_idString编号,自动生成_openidString用户openidaccountString用户账号nameString用户姓名subjectedString问卷_idsubjectnameString问卷名称answerdateString答卷时间answerObject答卷选项属性数据类型说明bhString编号selString选项_id:0288fce75fcf54ea00ec5d375777e415,answer:bh:1.0,sel:A,bh:2.0,sel:B,bh:3.0,sel:C,answerdate:2020/12/8,na
44、me:王英,subjectname:12月份调查,_openid:oC9zG5UZKMlMq9-gBCNeBqQ7vABU,account:106,subjectid:0bcbdde05fbe4750004b95b91f2419c07.5.3 系统实现系统实现-2.云函数创建云函数创建在系统设计过程中,函数创建和调用的原则是对于用户仅仅访问自己创建的数据,用小程序API访问云数据库,对于要访问云端数据库所有数据,系统采用云函数来实现。本系统根据程序设计的需要,创建和使用以下各云函数。407.5.3 系统实现系统实现- 2.云函数创建云函数创建 (1)login()云函数login云函数在本系统
45、中作用主要是获得操作用户的openid,该函数利用云开发模板自动生成。该云函数index.js代码如下:41exports.main = async (event, context) = / 获取 WX Context (微信调用上下文),包括 OPENID、APPID、/及 UNIONID(需满足 UNIONID 获取条件)等信息 const wxContext = cloud.getWXContext() return event, openid: wxContext.OPENID, appid: wxContext.APPID, unionid: wxContext.UNIONID, e
46、nv: wxContext.ENV, / login.()云函数js代码/ 部署:在 cloud-functions/login 文件夹右击选择 “上传并部署”const cloud = require(wx-server-sdk)/ 初始化 cloudcloud.init( / API 调用都保持和云函数当前所在环境一致 env: cloud.DYNAMIC_CURRENT_ENV)/这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端7.5.3 系统实现系统实现- 2.云函数创建云函数创建 (2)addPersonalInfo()云函数addPersonalInfo云函数是用户
47、初次登陆,用来完善用户信息。函数通过event参数出入personalInfo数据,根据personalInfo数据提取用户在集合users中的_id,然后更新_id对应的用户的信息。该函数判断type的值,区分学生和教师,学生添加班级字段信息,教师添加部门字段信息,其它字段相同。该云函数index.js代码如下:42 user.type=personalInfo.type, user.account=personalInfo.account, user.academy=personalInfo.academy, user.verify=true /是否完善设置为true if(persona
48、lInfo.type=0) user.class=personalInfo.class /type=0,suers集合存储学生班级信息 else user.depart=personalInfo.depart /type=1,suers集合存储教师部门信息 return await collection.doc(id).set( /更新users集合 data:user /更新user对象 ) catch(e) console.error(e) / addPersonalInfo()云函数js代码const cloud = require(wx-server-sdk)cloud.init( e
49、nv: teach-2g2kzjxb411e2e2e)const db = cloud.database()const collection=db.collection(users)exports.main = async (event, context) = /获得event传递的用户信息 let personalInfo=event.personalInfo let id=personalInfo._id / 用户的id try let user= /定义user对象 user._openid=personalInfo._openid, user.birthday=personalInfo
50、.birthday, user.name=personalInfo.name, user.picture=personalInfo.picture, user.psw=personalInfo.psw, user.sex=personalInfo.sex,7.5.3 系统实现系统实现- 2.云函数创建云函数创建 (3)addSubject()云函数addSubject云函数向subject集合指定的调查问卷添加问卷题目。event参数传入当前试卷的名称currentSugject和问卷内容timu数组43/addSubject.()云函数js代码/增加试题const cloud = requi