微信小程序 多個小程序訪問同一個雲數據庫,實現跨環境資源獲取


官方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   }

 

處理后的返回結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM