在创建云开发项目的过程中,官方资料中提到微信开发工具中存在一个特定选项,然而在我实际操作中并未找到该选项,这或许是由于开发工具的版本不同,亦或是其他因素所导致。
给数据库添加数据
我在猫眼电影拷贝了部分数据,准备倒入小程序云开发的数据库
在控制台界面,用户既可手动输入数据,亦能通过导入json文件的方式实现数据导入。在此情况下,我决定调用该API接口,以导入猫眼的相关json数据。
首先我创建了一个名为的集合,紧接着调用初始化的方法
app.js
... onLaunch: function () { wx.cloud.init() } ... 复制代码
为了对数据库进行操作,我们必须首先取得数据库的引用,并且,还需要获取我刚刚建立的集合的引用。考虑到这一引用在其他页面也会被使用,我决定将它们都附加到应用程序的属性之中。
const app = getApp() ... app.$db = wx.cloud.database() app实例的collect_movies属性被设置为app实例的数据库中名为'movies'的集合。 ... 复制代码 最后, 调用添加的方法 data.subjects.forEach(o => { app.$collect_movies.add({ data: o }) }) 复制代码 现在云开发控制台数据库里已经有添加的数据了 显示所有电影 app.$collect_movies.where({ openid标识为:'ofgUd0Rb4w8E7Af40N46ExxozS5g'。 }).get({ success: function (res) { 在控制台输出“res”,后面跟着变量res的值。 that.setData({ movies: res.data }) } }) 复制代码
根据ID查询指定电影
调用app对象中的collect_movies方法,传入参数'W8Wf4t2AWotkhlzK',随后执行get操作。 success: function (res) { 在控制台输出“res”,后面跟着变量res的值。 that.setData({ movie: res.data }) } }) 复制代码 查询9分以上的电影 const _ = app.$db.command app.$collect_movies.where({ sc: _.gte(9) }).get({ success: function (res) { wx.hideLoading() that.setData({ movies: res.data }) } })
获取9分以上或0分的电影
const _ = app.$db.command app.$collect_movies.where({ sc: _.eq(0).or(_.gte(9)) }).get({ success: function (res) { wx.hideLoading() that.setData({ movies: res.data }) } }) 复制代码
修改主演名
# 确认修改 const that = this 应用程序通过调用collect_movies.doc方法,针对当前电影ID进行文档更新操作,具体参数为:{ data: {
删除一部电影
# 确定删除 delAction(e) { const that = this const id = 事件当前目标所携带的数据ID。 应用通过调用$collect_movies.doc方法,并传入id参数,进而执行remove操作,以删除对应文档。 success: function (res) { that.initUpdateData() } }) } 复制代码
文件管理上传图片到云存储
尝试将手机相册中的照片传输至小程序的云端存储服务,便能在小程序界面直接调用所提供的应用程序编程接口。
wx.cloud.uploadFile({ 云端存储路径为:'example.png',此为上传文件的具体位置指示。 filePath: "", // 表示该小程序的临时文件存储路径未指定 success: res => { // 返回文件 ID console.log(res.fileID) }, fail: console.error }) 复制代码 仅从代码数量角度考量,其操作过程甚至比将内容上传至腾讯自家的腾讯云还要简便,更不用说与上传至阿里云、七牛云等类似平台相比,那更是简单许多。 上传完成后,系统反馈的不是图片的链接地址,而是文件的唯一标识码。若需展示图片或播放视频,只需使用该文件标识码,小程序中的image或video组件即可识别并正常显示。 复制代码 upload() { const that = this wx.chooseImage({ count: 1, 支持的尺寸类型包括:原始尺寸、压缩尺寸。 来源类型包括:相册、相机。 success(res) { res中包含的临时文件路径数组被赋值给变量tempFilePaths。 console.log(tempFilePaths[0]) wx.cloud.uploadFile({ cloudPath: 'test/2.png',即指定了文件上传到云端的存储路径,路径为“test”文件夹下的“2.png”文件。 filePath 为 tempFilePaths 数组中的第一个元素,代表小程序的临时文件路径。 success: res => { // 返回文件 ID console.log(res.fileID) that.setData({ fileId: res.fileID }) }, fail: console.error }) } }) }
根据文件id下载文件
downloadFile() { wx.cloud.downloadFile({ 该文件标识符为:cloud://ii-1853ca.6969-ii-1853ca/test/2.png,位于云存储系统中。 success: res => { // 返回临时文件路径 在控制台输出“tempFilePath”,以及结果。 严禁对“ii-1853ca.6969-ii-1853ca/test/2.png”这一路径下的文件进行任何修改操作。 this.setData({ downloadFileResult: res }) }, fail: err => { // handle error } }) 复制代码
根据文件id换取临时网络链接
您可以通过文件标识码来获取临时的文件网络连接,该链接的有效期限为两小时。
const that = this wx.cloud.getTempFileURL({ fileList: [this.data.fileId], success: res => { 该链接指向的图片文件,位于特定服务器上,禁止对其进行修改,确保内容专属性,不得擅自更改或删除。 that.setData({ fileList: res.fileList }) }, fail: err => { // handle error } }) 复制代码
云函数
怎么玩?
云函数是运行在Node.js环境下的
在小程序项目的根目录中,需搜寻名为“配置文件”的“.json”文件,并向其中添加一项配置,明确将本地已存在的某个目录设定为云函数的本地根目录。
cloudfunctionRoot变量设置为"./functions/"目录路径。 复制代码
指定之后神奇的一幕就是图标会变成 “云目录图标”
我通过点击右键菜单创建子目录,随后新增了一个云函数,而该云函数的文件名与子目录名称相同。
每次构建一个新的云函数时,系统会弹出提示框,询问用户是否已安装node.js环境。一旦确认,系统便会自动启动终端,并执行依赖项的安装。因此,在每一个云函数的构建过程中,我们都能看到这样的操作流程:,,,,。
在.js中, 默认是这样的
// 云函数入口文件 引入了名为 `cloud` 的模块,该模块是通过 `require` 函数从 `wx-server-sdk` 中加载的。 cloud.init() // 云函数入口函数 导出主函数,以异步方式执行,接收事件和上下文参数。 } 复制代码 创建一个相加的云函数 plus/ // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 此处调用的调用信息和运行状态均包含在context对象之中。 // event 指的是触发云函数的事件 exports.main = async (event, context) => { return { sum: event.a + event.b } } 复制代码 在小程序平台中,直接调用plus云函数时,其参数的名称清晰可见,无需额外说明。 wx.cloud.callFunction({ name: 'plus', data: { a: 1, b: 2, }, success: function (res) { 在控制台输出“plus”,以及结果res中的result值,即3。 }, fail: console.error })
复制代码
使用云函数时遇到错误提示,其原因是未能将构建的函数成功上传并部署至服务器端。具体部署步骤,请参照下方的图示进行操作。
部署成功之后,我们来到云控制台, 发现云函数已经在上面
进入小程序后,我重新执行了云函数的调用,结果令人满意,成功获取到了期望的数值3。
获取小程序用户信息
云函数作为云开发的核心组件,其显著特点是能够与微信登录的鉴权机制实现无缝对接。在调用云函数的过程中,用户的身份信息会被自动嵌入到函数的输入参数中,这使得开发者无需对用户身份信息的准确性进行验证。这是因为微信已经预先完成了鉴权工作,开发者可以直接利用这些信息。此外,与用户身份信息一同注入云函数的,还有小程序的其它相关数据。
定义云函数
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数
复制代码
在云函数开发过程中,我们能够引入外部依赖库以提升开发效率。由于云函数的执行环境为 Node.js,我们得以通过 npm 来安装这些依赖。举例来说,我们不仅能够利用 Node.js 内置的 http 接口在云函数内发起网络请求,而且还可以借助一款流行的 Node.js 网络请求库,以更加简便的方式执行网络请求操作。
请注意,当前上传云函数时,系统不会在云端自动进行依赖的安装;因此,开发者需在本地完成依赖的安装,并将安装好的依赖与代码一同打包后进行上传。
云函数操作数据库
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() // 云函数入口函数 exports.main = async (event, context) => { // 获取电影集合数据 返回数据库中名为'movies'的集合,并获取其内容。 } 复制代码 云函数调用其他云函数 定义云函数 // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { 返回值是await cloud调用函数的结果,该函数的调用参数为{。 name: 'plus', data: { a: 1, b: 2, } }) }
复制代码
调用云函数
wx.cloud.callFunction({ 名称为“cloudFuncCallColundFunc”, complete: res => { console.log('执行云函数调用云函数', res); }, }) 复制代码
云函数日志、测试
可以看到调用的云函数的调用日志
可直接对编写的云函数进行测试,只需输入相应参数,然后点击运行调试的按键。
云开发初体验总结
云开发大约在八月进行了公测,九月份正式推出,转眼间已至十一月。官方透露,参与的开发人员数量超出了预期,同时,也涌现出不少批评之声。小程序的云开发尚处于探索阶段,存在不少问题,但未来无疑将逐步完善。随着其逐渐成熟,将变为一个相当出色的解决方案,尤其对初创企业而言。