当前位置:K88软件开发文章中心编程全书微信小程序 → 文章内容

微信小程序云开发云函数

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 15:02:22

代码中:wx.cloud.callFunction({ name: 'test', data: { a: 1, b: 2, }, complete: res => { console.log('callFunction test result: ', res) },})此时应该看到调试器输出:callFunction test result: 3使用 npm在云函数中我们可以引入第三方依赖来帮助我们更快的开发。云函数的运行环境是 Node.js,因此我们可以使用 npm 安装第三方依赖。比如除了使用 Node.js 提供的原生 http 接口在云函数中发起网络请求,我们还可以使用一个流行的 Node.js 网络请求库 request 来更便捷的发起网络请求。注意,现在上传云函数时不会在云端自动安装依赖,需要开发者在本地安装好依赖后一起打包上传。接下来,我们一起了解下官方提供的云函数端 SDK: wx-server-sdk。在云函数中使用 wx-server-sdk云函数属于管理端,在云函数中运行的代码拥有不受限的数据库读写权限和云文件读写权限。需特别注意,云函数运行环境即是管理端,与云函数中的传入的 openId 对应的微信用户是否是小程序的管理员 / 开发者无关。云函数中使用 wx-server-sdk 需在对应云函数目录下安装 wx-server-sdk 依赖,在创建云函数时会在云函数目录下默认新建一个 package.json 并提示用户是否立即本地安装依赖。请注意云函数的运行环境是 Node.js,因此在本地安装依赖时务必保证已安装 Node.js,同时 node 和 npm 都在环境变量中。如不本地安装依赖,可以用命令行在该目录下运行:npm install --save wx-server-sdk@latest在云函数中调用其他 API 前,同小程序端一样,也需要执行一次初始化方法:const cloud = require('wx-server-sdk')// 默认配置cloud.init()// 或者传入自定义配置cloud.init({ env: 'some-env-id'})wx-server-sdk 与小程序端的云 API 以同样的风格提供了数据库、存储和云函数的 API。下面提供几个简单的操作数据库、存储和云函数的示例:云函数中调用数据库假设在数据库中已有一个 todos 集合,我们可以如下方式取得 todos 集合的数据:const cloud = require('wx-server-sdk')cloud.init()const db = cloud.database()exports.main = async (event, context) => { // collection 上的 get 方法会返回一个 Promise,因此云函数会在数据库异步取完数据后返回结果 return db.collection('todos').get()}云函数中调用存储假设我们要上传在云函数目录中包含的一个图片文件(demo.jpg):const cloud = require('wx-server-sdk')const fs = require('fs')const path = require('path')exports.main = async (event, context) => { const fileStream = fs.createReadStream(path.join(__dirname, 'demo.jpg')) return await cloud.uploadFile({ cloudPath: 'demo.jpg', fileContent: fileStream, })}在云函数中,__dirname 的值是云端云函数代码所在目录云函数中调用其他云函数假设我们要在云函数中调用另一个云函数 sum 并返回 sum 所返回的结果:const cloud = require('wx-server-sdk')exports.main = async (event, context) => { return await cloud.callFunction({ name: 'sum', data: { x: 1, y: 2, } })}更详细的 wx-server-sdk 文档可参见服务端 API 文档。接下来,我们一起了解下云函数的运行机制。运行机制运行环境云函数运行在云端 Linux 环境1中,一个云函数在处理并发请求的时候会创建多个云函数实例,每个云函数实例之间相互隔离,没有公用的内存或硬盘空间。云函数实例的创建、管理、销毁等操作由平台自动完成。每个云函数实例都在 /tmp 目录下提供了一块 512MB 的临时磁盘空间用于处理单次云函数执行过程中的临时文件读写需求,需特别注意的是,这块临时磁盘空间在函数执行完毕后可能被销毁,不应依赖和假设在磁盘空间存储的临时文件会一直存在。如果需要持久化的存储,请使用云存储功能。无状态函数云函数应是无状态的,幂等的,即一次云函数的执行不依赖上一次云函数执行过程中在运行环境中残留的信息。为了保证负载均衡,云函数平台会根据当前负载情况控制云函数实例的数量,并且会在一些情况下重用云函数实例,这使得连续两次云函数调用如果都由同一个云函数实例运行,那么两者会共享同一个临时磁盘空间,但因为云函数实例随时可能被销毁,并且连续的请求不一定会落在同一个实例,因此云函数不应依赖之前云函数调用中在临时磁盘空间遗留的数据。总的原则即是云函数代码应是无状态的。事件模型云函数的调用采用事件触发模型,小程序端的每一次调用即触发了一次云函数调用事件,云函数平台会新建或复用已有的云函数实例来处理这次调用。同理,因为云函数间也可以相互调用,因此云函数间相互调用也是触发了一次调用事件。自动扩缩容开发者无需关心云函数扩容和缩容的问题,平台会根据负载自动进行扩缩容。Footnotes 当前运行环境是在 CentOS 7.2 中,特别注意编写代码不应依赖特定的操作系统或特定的操作系统版本号,运行环境可能会发生变化,代码应尽量与平台无关注意事项 & FAQ临时存储空间云函数的运行环境中在 /tmp 目录下提供了一块 512MB 的临时磁盘空间,用于处理单次云函数执行过程中的临时文件读写需求,需特别注意的是,这块临时磁盘空间在函数执行完毕后可能被销毁,不应依赖和假设在磁盘空间存储的临时文件会一直存在。如果需要持久化的存储,请使用云存储功能。用户代码目录:__dirname在云函数执行过程中,通过 __dirname 可获取当前云函数的根目录,如果有随云函数打包上传的资源文件,可以通过 __dirname 加相对路径引用获取。Node.js native 依赖如果有使用到平台相关的 native 依赖,即依赖需要在相应平台下编译(Windows / macOS / Linux ...)的,务必注意在 Linux 平台(CentOS 7 最佳)下编译后再上传,否则可能出现环境兼容性问题。在开发者工具中管理云函数配置云函数本地目录在项目根目录中可以使用 project.config.json 文件,在其中定义 cloudfunctionRoot 字段,指定本地已存在的目录作为云函数的本地根目录。云函数操作在云函数根目录或者云函数目录上,通过鼠标右键,我们可以唤出右键菜单,完成以下操作 查看当前环境 切换环境 新建 Node.js 云函数 下载线上环境的云函数列表 下载线上环境的云函数代码并覆盖本地 对比本地代码和线上环境的代码 上传并部署

上一页  [1] [2] [3]  下一页


微信小程序云开发云函数