# 9、请求多服务空间

# 前端请求多服务空间

# 方式一

# 请求支付宝云空间

const myCloud = uniCloud.init({
  provider: 'alipay', // 支付宝云
  spaceId: 'env-xxxxxx', // 服务空间id 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceId参数
  spaceAppId: "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceAppId参数
  accessKey: "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应AK参数 
  secretKey: "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SK参数
  // endpoint: "" // 选填 api网关地址,需要海外加速时使用,仅阿里云和支付宝云支持此参数
});
vk.callFunction({
  url: 'template/db_api/pub/count',
  title: '请求中...',
  uniCloud: myCloud,
  success: (data) => {
    console.log(data);
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 请求阿里云空间

const myCloud = uniCloud.init({
  provider: 'aliyun', // 阿里云
  spaceId: 'mp-xxxxxx', // 服务空间id 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceId参数
  clientSecret: '', // 阿里云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应ClientSecret参数
  // endpoint: "", // 选填 api网关地址,需要海外加速时使用,仅阿里云和支付宝云支持此参数
});
vk.callFunction({
  url: 'template/db_api/pub/count',
  title: '请求中...',
  uniCloud: myCloud,
  success: (data) => {
    console.log(data);
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 请求腾讯云空间

const myCloud = uniCloud.init({
  provider: 'tencent', // 腾讯云
  spaceId: 'tcb-xxxxxx', // 服务空间id 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceId参数
});
vk.callFunction({
  url: 'template/db_api/pub/count',
  title: '请求中...',
  uniCloud: myCloud,
  success: (data) => {
    console.log(data);
  }
});
1
2
3
4
5
6
7
8
9
10
11
12

# 方式二

方式二需要 vk-unicloud 核心库版本 >= 2.8.1

app.config.js 中新增配置 uniCloud 属性,如下

{
  "uniCloud": {
    // 自定义默认环境(一般无需配置,除非你知道这么配置带来的意义)
    "envs": {
      // 当有设置 default 的环境时,不传env,会自动用此环境调用云函数。
      "default":{
        "provider": "", // 通用参数 支付宝云:alipay 阿里云:aliyun 腾讯云:tencent 
        "spaceId": "", // 通用参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceId参数
        "clientSecret": "", // 阿里云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应ClientSecret参数
        "spaceAppId": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceAppId参数
        "accessKey": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应AK参数 
        "secretKey": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SK参数
        "endpoint": "" // 选填 api网关地址,需要海外加速时使用,仅阿里云和支付宝云支持此参数
      },
      // a环境
      "a":{
        "provider": "", // 通用参数 支付宝云:alipay 阿里云:aliyun 腾讯云:tencent
        "spaceId": "", // 通用参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceId参数
        "clientSecret": "", // 阿里云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应ClientSecret参数
        "spaceAppId": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceAppId参数
        "accessKey": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应AK参数 
        "secretKey": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SK参数
        "endpoint": "" // 选填 api网关地址,需要海外加速时使用,仅阿里云和支付宝云支持此参数
      },
      // b环境
      "b":{
        "provider": "", // 通用参数 支付宝云:alipay 阿里云:aliyun 腾讯云:tencent
        "spaceId": "", // 通用参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceId参数
        "clientSecret": "", // 阿里云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应ClientSecret参数
        "spaceAppId": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SpaceAppId参数
        "accessKey": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应AK参数 
        "secretKey": "", // 支付宝云专属参数 从 https://unicloud.dcloud.net.cn/home 获取 对应SK参数
        "endpoint": "" // 选填 api网关地址,需要海外加速时使用,仅阿里云和支付宝云支持此参数
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

前端调用

使用 default 环境调用云函数(如果没有配置 default 环境,则使用项目绑定的云环境调用云函数)

vk.callFunction({
  url: '',
  title: '请求中...',
  data: {

  },
  success: (data) => {

  }
});
1
2
3
4
5
6
7
8
9
10

使用 a 环境调用云函数

vk.callFunction({
  url: '',
  title: '请求中...',
  env: 'a', // 使用a环境调用云函数
  data: {

  },
  success: (data) => {

  }
});
1
2
3
4
5
6
7
8
9
10
11

使用 b 环境调用云函数

// 使用 b 环境调用云函数
vk.callFunction({
  url: '',
  title: '请求中...',
  env: 'b', // 使用b环境调用云函数
  data: {

  },
  success: (data) => {

  }
});
1
2
3
4
5
6
7
8
9
10
11
12

当有设置 default 的环境时,不传env,会自动用此环境调用云函数。

vk.callFunction 参数说明:点击查看 (opens new window)

# uniCloud.init 参数说明

参数名 类型 必填 默认值 说明
provider String - alipay、aliyun、tencent
spaceId String - 服务空间ID,注意是服务空间ID,不是服务空间名称
clientSecret String - 仅阿里云支持,可以在uniCloud控制台 (opens new window)服务空间列表中查看
accessKey String - 仅支付宝云支持, 可以在uniCloud控制台 (opens new window)服务空间详情中查看
secretKey String - 仅支付宝云支持, 可以在uniCloud控制台 (opens new window)服务空间详情中查看
spaceAppId String - 仅支付宝云支持, 可以在uniCloud控制台 (opens new window)服务空间详情中查看
endpoint String 阿里云:https://api.next.bspapp.com
支付宝云:https://{spaceId}.api-hz.cloudbasefunction.cn
服务空间地址,仅阿里云与支付宝云支持。

# 云函数端请求多服务空间

# 方式一

云函数请求另外一个服务空间的数据库

目前仅限腾讯云支持

const myDB = uniCloud.database({
  provider: 'tencent', // 目前只支持tencent
  spaceId: 'xxxx-yyy'
})
res = await vk.baseDao.select({
  db: myDB,
  dbName: "vk-test",
  pageIndex: 1,
  pageSize: 100,
  whereJson: {

  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13

# uniCloud.database 参数说明

参数名 类型 必填 默认值 说明
provider String - 目前只能是 tencent
spaceId String - 服务空间ID,注意是服务空间ID,不是服务空间名称

# 方式二

云函数请求另外一个服务空间的云函数

目前仅限腾讯云支持

const myCloud = uniCloud.init({
  provider: 'tencent', // 目前只支持tencent
  spaceId: 'xxxx-yyy'
})
//通过 myCloud 实例调用API
myCloud.callFunction({
  name: "router", // 大云函数名称
  data: {
    $url: "云函数路由的路径",
    data: {
      // 请求参数
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14