背景介紹
使用云數(shù)據(jù)庫(kù)Server端的SDK,此處我以華為提供的官方Demo為例,他們的Demo也已經(jīng)開源放在了GitHub上,大家需要的可以自行下載。
https://github.com/AppGalleryConnect/agc-demos/tree/main/Server/agc-clouddb-demo-javascript
下載完Demo的項(xiàng)目代碼后,還需要按照以下步驟操作:
前期在調(diào)研 ??華為云函數(shù)服務(wù)???的時(shí)候,發(fā)現(xiàn)可以在云函數(shù)中配置云數(shù)據(jù)庫(kù)的觸發(fā)器,可以通過(guò)云數(shù)據(jù)庫(kù)的插入刪除修改等事件,用來(lái)觸發(fā)云函數(shù)中代碼的執(zhí)行?,F(xiàn)在華為AGC的??云數(shù)據(jù)庫(kù)服務(wù)??全網(wǎng)發(fā)布了,并且還提供了Server端的JavaScript SDK,剛好可以運(yùn)行在云函數(shù)支持的Node.js環(huán)境中。話不多說(shuō),先來(lái)嘗試一下如何在云函數(shù)中使用云數(shù)據(jù)庫(kù)提供的JavaScript SDK,進(jìn)行最簡(jiǎn)單的數(shù)據(jù)的插入和查詢吧。
開通服務(wù)
這里涉及開通兩個(gè)服務(wù): 首先需要使用華為賬號(hào)登錄? ??AGC網(wǎng)站?? ,按照以下步驟進(jìn)行操作:
1.開通云函數(shù)服務(wù)
在AGC內(nèi)選擇 "我的項(xiàng)目"–>選擇對(duì)應(yīng)的項(xiàng)目->"構(gòu)建"->"云函數(shù)",界面上點(diǎn)擊 "立即開通" , 開通以后點(diǎn)擊右側(cè)的創(chuàng)建函數(shù)即可。
2.開通云數(shù)據(jù)庫(kù)服務(wù)
在AGC內(nèi)選擇 "我的項(xiàng)目"–>選擇對(duì)應(yīng)的項(xiàng)目->"構(gòu)建"->"云數(shù)據(jù)庫(kù)",界面上點(diǎn)擊“立即開通”,開通以后,還需要?jiǎng)?chuàng)建對(duì)應(yīng)的對(duì)象類型和存儲(chǔ)區(qū)。 此處對(duì)應(yīng)類型和存儲(chǔ)區(qū)的創(chuàng)建,我都是按照數(shù)據(jù)庫(kù)文檔中的使用入門來(lái)創(chuàng)建的。包括創(chuàng)建一個(gè)? ??BookInfo 的對(duì)象類型???, 還有一個(gè)??QuickStartDemo??的存儲(chǔ)區(qū)。
云數(shù)據(jù)庫(kù)JavaScript代碼開發(fā)
使用云數(shù)據(jù)庫(kù)Server端的SDK,此處我以華為提供的官方Demo為例,他們的Demo也已經(jīng)開源放在了GitHub上,大家需要的可以自行下載。
https://github.com/AppGalleryConnect/agc-demos/tree/main/Server/agc-clouddb-demo-javascript
下載完Demo的項(xiàng)目代碼后,還需要按照以下步驟操作:
- 導(dǎo)出對(duì)象類型文件
在云數(shù)據(jù)庫(kù)的界面中,對(duì)已經(jīng)創(chuàng)建的對(duì)象類型BookInfo,導(dǎo)出成js的ServerSDK的格式,將其放到demo的model目錄下。
- 下載認(rèn)證憑據(jù)。
AGC的界面中,選擇項(xiàng)目設(shè)置,在ServerSDK頁(yè)簽下,點(diǎn)擊 “下載認(rèn)證憑據(jù)” 進(jìn)行下載,并且同樣放到demo的model目錄下。
3、修改credentialPath路徑。
由于我的認(rèn)證憑據(jù)下載以后放在model目錄下,因此還需要同步修改代碼中credentialPath路徑,在CloudDBZoneWrapper.js文件中,修改初始化的代碼,具體如下: (注意對(duì)于云函數(shù)環(huán)境,獲取路徑下的文件,要使用_dirname方法)
let api_client_name = "agc-apiclient-testDB.json";
let path = require('path');
let api_client_path = path.join(__dirname,api_client_name);
agconnect.AGCClient.initialize(agconnect.CredentialParser.toCredential(api_client_path))
4.配置函數(shù)入口。我這沒有使用示例代碼中默認(rèn)的Start.js的接口,而是自己創(chuàng)建了一個(gè)inde.js的文件作為函數(shù)的入口,對(duì)應(yīng)的代碼如下
const CloudDBZoneWrapper = require("./model/CloudDBZoneWrapper.js");
let myHandler = async function(event, context, callback, logger) {
logger.info(JSON.stringify(event));
logger.info("event start");
const cloudDBZoneWrapper = new CloudDBZoneWrapper();
const bookInfo = cloudDBZoneWrapper.getSingleBook();
// upsert a list of books
await cloudDBZoneWrapper.upsertBookInfos(bookInfo);
let result = {"message":"Run Success"}
callback(result);
}
module.exports.myHandler = myHandler
打包上傳與配置觸發(fā)器
- 如需將本地項(xiàng)目運(yùn)行到云函數(shù)中,需要將項(xiàng)目整體打包上傳,然后使用事件進(jìn)行測(cè)試。注意函數(shù)入口需要在根目錄下
2、在AGC的云函數(shù)界面,進(jìn)行文件的上傳,并且注意函數(shù)入口需要配置為index.myHandler。
3、配置對(duì)應(yīng)的CloudDB觸發(fā)器,此時(shí)需要配置CLoudDB中,對(duì)應(yīng)的存儲(chǔ)區(qū)和對(duì)象類型。
4、配置完成后,點(diǎn)擊保存
測(cè)試函數(shù)效果
1、在函數(shù)界面,選擇對(duì)應(yīng)的測(cè)試頁(yè)簽。 2、根據(jù)云函數(shù)的編程模型文檔,配置相應(yīng)的CloudDB觸發(fā)器觸發(fā)事件。 https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudfunction-programmode-0000001058311525#section207831182811 3、比如我要配置對(duì)應(yīng)的插入事件,對(duì)應(yīng)的參數(shù)如下
{
"records": [{
"before": null,
"after": {
"id": "11111",
"bookName": "user1"
}
}],
"objectTypeName": "BookInfo",
"naturalStoreName": "QuickStartDemo"
4.最終的函數(shù)效果
參考鏈接:
華為AppGallery Connect 云函數(shù)服務(wù)業(yè)務(wù)介紹:
云函數(shù) – 創(chuàng)建函數(shù) 文檔說(shuō)明 編程模型文檔說(shuō)明:
云數(shù)據(jù)庫(kù) JavaScript Server SDK文檔開發(fā)指南:
本文摘自 :https://blog.51cto.com/u