云函数端初始化
云函数端初始化
调用云函数、数据库、存储、云托管等 API 时,都需要指定所需访问的云环境 ID,意即指定访问哪个环境下的云函数/数据库/存储/云托管/...资源。有两种方式进行指定:
- 使用默认实例
cloud:在使用默认实例调用 API 时,各个 API 都支持传入 env 用于指定所需访问的云环境 ID,如果 API 中不传,则使用cloud.init时传入的 env。 - 为各个环境使用单独的实例:使用
new cloud.CloudAPI 为新建一个专用于访问某个环境的实例,在该实例上进行的 API 调用都只会访问该环境。
| 实例 | API |
|---|---|
| cloud 默认实例 | cloud.callFunction cloud.callContainer cloud.database ... 访问API参数中指定的环境或cloud.init指定的默认环境 |
| a = new cloud.Cloud({ resourceEnv: 'a' }) 仅用于访问环境 a 的实例 | a.callFunction a.callContainer a ... 访问 a 环境的云资源 |
| b = new cloud.Cloud({ resourceEnv: 'b' }) 仅用于访问环境 b 的实例 | b.callFunction b.callContainer a ... 访问 b 环境的云资源 |
一、默认实例 cloud
在调用云开发各 API 前,需先调用初始化方法 init 一次(全局只需一次,多次调用时只有第一次生效)
cloud.init 方法的定义如下:
function init(options): void
cloud.init 方法接受一个 options 参数,方法没有返回值。
| 字段 | 数据类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| env | string | 是 | 必填,环境ID,指定接下来调用 API 时访问哪个环境的云资源。 如果希望接下来 API 调用的环境就等于当前云函数所在的环境,而不用传入一个固定 ID,则可以使用 cloud.DYNAMIC_CURRENT_ENV |
|
| timeout | number | 否 | 15000 | API 超时时间设置,默认 15 秒,从 1.7.0 开始支持 |
示例代码:
const cloud = require('wx-server-sdk')
cloud.init({
env: 'test-x1dzi'
})
建议在设置 env 时指定 cloud.DYNAMIC_CURRENT_ENV 常量 (需 SDK v1.1.0 或以上) ,这样云函数内发起数据库请求、存储请求或调用其他云函数的时候,默认请求的云环境就是云函数当前所在的环境:
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event) => {
const { ENV, OPENID, APPID } = cloud.getWXContext()
// 如果云函数所在环境为 abc,则下面的调用就会请求到 abc 环境的数据库
const dbResult = await cloud.database().collection('test').get()
return {
dbResult,
ENV,
OPENID,
APPID,
}
}
注:上述代码中的
env参数的值不能用cloud.getWXContext().ENV替代,因为在exports.main外部调用的getWXContext()无法获取到当前环境
需要特别注意的是,在 wx-server-sdk 中不再兼容 success、fail、complete 回调,总是只会返回 Promise。
二、新建实例 new cloud.Cloud
使用 new cloud.Cloud 新建 Cloud 实例时需要指定云环境 ID,方法定义如下
function cloud.Cloud(options): Cloud
options 参数定义:
| 字段 | 数据类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| resourceEnv | string | 是 | 必填,环境ID,指定接下来调用 API 时访问哪个环境的云资源 | |
| timeout | number | 否 | 15000 | API 超时时间设置,默认 15 秒,从 1.7.0 开始支持 |
在新建完成实例后,必须先调用初始化方法 init 一次(只需一次,多次调用时只有第一次生效)。
示例代码:
const a = new cloud.Cloud({
resourceEnv: 'a',
})
await a.init()
// 可以调用云开发 API 访问云资源了,如
const res = await a.callFunction({
name: 'test',
data: {
// ...
},
})
如果是跨账号环境共享的场景(使用其他微信云开发的资源),必须使用 new cloud.Cloud 新建实例使用,具体参见文档。
浙公网安备 33010602011771号