微信小程序 多个小程序访问同一个云数据库,实现跨环境资源获取
官方API Link
官方解释
云开发支持跨账号环境(资源)共享,即一个小程序的云开发资源可以授权共享给同主体下其他小程序 / 公众号使用
需求
已知两个或多个小程序,A,B...
B需要访问A的云数据库进行操作,其他类似
A端(资源方)操作
创建一个云函数,名为 cloudbase_auth,将以下代码写入,同步
1 const cloud = require('wx-server-sdk') 2 cloud.init({ 3 env: cloud.DYNAMIC_CURRENT_ENV 4 }) 5 6 // 云函数入口函数 7 exports.main = async (event, context) => { 8 const wxContext = cloud.getWXContext() 9 10 console.log(event) 11 console.log(wxContext) 12 // 跨账号调用时,由此拿到来源方小程序/公众号 AppID 13 console.log(wxContext.FROM_APPID) 14 // 跨账号调用时,由此拿到来源方小程序/公众号的用户 OpenID 15 console.log(wxContext.FROM_OPENID) 16 // 跨账号调用、且满足 unionid 获取条件时,由此拿到同主体下的用户 UnionID 17 console.log(wxContext.FROM_UNIONID) 18 19 return { 20 errCode: 0, 21 errMsg: '', 22 auth: JSON.stringify({ 23 // 自定义安全规则 24 // 在前端访问资源方数据库、云函数等资源时,资源方可以通过 25 // 安全规则的 `auth.custom` 字段获取此对象的内容做校验, 26 // 像这个示例就是资源方可以在安全规则中通过 `auth.custom.x` 获取 27 //x: 1, 28 }), 29 } 30 }
B端(需求方)操作
创建一个云函数,用于请求A方资源,例如叫GetADB
将以下代码写入GetADB保存后同步,注意修改自己的配置信息
1 // 云函数入口文件 2 const cloud = require('wx-server-sdk') 3 4 5 // 云函数入口函数 6 exports.main = async (event, context) => { 7 8 // 声明新的 cloud 实例 9 var c1 = new cloud.Cloud({ 10 // 资源方 AppID 11 resourceAppid: '修改为A的AppID', 12 // 资源方环境 ID 13 resourceEnv: '修改为A的环境ID', 14 }) 15 16 // 跨账号调用,必须等待 init 完成 17 // init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则 18 await c1.init() 19 20 // 完成后正常使用资源方的已授权的云资源 21 return new Promise(async (resolve, reject) => { 22 23 //多数报错504002什么的,都是没写下面这段代码,或者查询的数据库不存在导致 24 const db = c1.database() 25 await db.collection('数据库名称').limit(1000) 26 //查询条件 27 .field({ 28 id: true 29 }) 30 .get() 31 .then(res => { 32 console.log('获取-A数据库-成功',res) 33 resolve(res.data) 34 }) 35 .catch(err => { 36 console.log('获取-A数据库-失败',err) 37 reject(err) 38 }) 39 }) 40 41 }
测试请求
在小程序B调用自己的云函数GetADB
1 async GetADB(){ 2 await wx.cloud.callFunction({ 3 name:'GetADB' 4 }) 5 .then(res=>{ 6 console.log(res); 7 }) 8 .catch(err=>{ 9 console.log(err); 10 }) 11 }
处理后的返回结果
时间若流水,恍惚间逝去
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤