首頁>科技>

簡介: 小程式Serverless產品,提供包括雲函式、資料儲存、檔案儲存等一整套後端服務。

【作者簡介】

奧沙,螞蟻金服智慧科技高階開發工程師,曾就職于飛豬,長期從事java後端開發工作,熟悉小程式雲後端相關產品使用及研發流程。【Serverless簡介】

阿里雲小程式雲產品,提供了無服務端模式Serverless和有服務端模式雲應用,兩種小程式後端雲服務。

小程式Serverless產品,提供包括雲函式、資料儲存、檔案儲存等一整套後端服務。

開發者通過API方式即可獲取雲函式、資料儲存、檔案儲存、音視訊、影象處理等服務,不需要關心伺服器或底層運維設施,可以更專注於程式碼和業務本身。

阿里雲使用者在開通小程式雲產品之後,在支付寶小程式中增加相關配置即可使用Serverless進行DB、檔案的儲存和訪問,以及利用雲函式在服務端完成複雜的計算和操作。

【小程式開發】

1、支付寶小程式準備

支付寶小程式開發就不詳細介紹了,從建立小程式,到開發、提審官網有詳盡的文件和示例。

參見阿里雲Serverelss關於小程式開發流程的指導文件。

生成小程式公私鑰

由於Serverless需要以開發者身份訪問支付寶OpenAPI,用於獲取C端使用者資訊等,所以需要在Serverless中錄入小程式的私鑰和支付寶公鑰。參見支付寶祕鑰生成文件。

2、IDE小程式開發

開發流程Serverless官方文件已有詳盡的流程指導,以下主要記錄開發過程中的一些需要注意的點。

2.1 新增Serverless SDK依賴

可以修改package.json,新增依賴{"@alicloud/mpserverless-sdk": "^2.1.2"}。也可以下載Serverless官方Demo,在Demo基礎上修改。

2.2 引入Serverless

在app.js中引入Serverless全域性物件,即可在所有Page中直接引用,用於呼叫DB、File、雲函式介面。

2.3 配置App頁面列表

2.4 獲取使用者資訊

小程式中關於資料和檔案的讀寫,都需要關聯到使用小程式的當前C端使用者。

PS:Serverless獲取的使用者資訊,是Serverless域所使用的userId和授權oAuthUserId等資訊,不包括使用者頭像和暱稱等,如需獲取使用者頭像等資訊,需要呼叫JSAPI “my.getAuthUserInfo”或者"my.getOpenUserInfo"獲取。

Serverless獲取使用者資訊示例程式碼如下。支付寶授權code 10分鐘有效,所以需要保證在查詢使用者資訊前通過user.authorize介面重新整理授權code(支付寶頒發給開發者的)。

// 先獲取使用者授權(如使用者未授權會彈窗喚起授權視窗)const res = await app.serverless.user.authorize({ authProvider: 'alipay_openapi'}).catch(console.error);if (res && res.success) { console.log('授權成功'); const userInfo = await app.serverless.user.getInfo({ authProvider: 'alipay_openapi', }).catch(console.error); if (userInfo.success) { console.log('getUserInfo res', userInfo); app.user = userInfo.result.user; this.setData({ user: userInfo.result.user }); }}

獲取使用者頭像的JSAPI

my.getAuthCode({scopes: ['auth_user'],success: authcode => { console.info('getUserInfo authcode', authcode); my.getAuthUserInfo({ success: res => { console.log('auth userinfo', res); that.setData({ appUser: res }); } });}});

2.5 Serverless 資料讀寫操作

此處僅示例查詢和insert操作,其他介面參見Serverless阿里雲文件即可。

資料庫查詢

app.serverless.db.collection('decisions').find( { userId: this.data.user.userId }, // 查詢條件 { sort: { createTime: -1 } }, // 時間降序排列).then(res => { console.log('loadList result', res); if(res.success && res.result){ this.setData({ decisionlist: res.result, }); }}).catch(console.error);資料庫插入var insertData = { name: this.data.name, userId: this.data.user.userId, oAuthUserId: this.data.user.oAuthUserId, items, createTime: new Date(), updateTime: new Date(),};console.log('add new decision', insertData);res = await app.serverless.db.collection('decisions').insertOne(insertData);

2.6 檔案上傳

my.chooseImage({ chooseImage: 1, success: res => { const path = res.apFilePaths[0]; const options = { filePath: path, headers: { contentDisposition: 'attachment', }, }; app.serverless.file.uploadFile(options).then((image) => { console.log(image); this.setData({ imageUrl: image.fileUrl, }); }).catch(console.log); },});

2.7 雲函式

IDE內集成了雲函式相關的操作。PS:由於歷史原因,需要安裝舊的Serverless SDK,"@ant-basement/miniprogram-sdk": "^2.2.24"。

設定雲服務型別

在工程根目錄下增加檔案mini.project.json

{ "cloud": { "type": "BASEMENT" }}

編寫&部署雲函式

小程式開發注意事項

1、不能在首屏喚起使用者授權。

需要使用者了解小程式內容後,才能在業務流程中喚起使用者授權,否則提審會直接不通過。

所以不能在App.onLoad中呼叫my.getAuthCode或者serverless.authorize介面。

2、my.navigateTo介面最多隻能遞迴呼叫10次

小程式頁面棧最多十層,超過後呼叫無反應。

所以不能讓頁面有迴圈呼叫navigateTo的場景。不需要【返回】的頁面直接用redirectTo重定向即可。

3、JSAPI建議使用非同步介面

同步呼叫體檢會不通過。

本文出自:阿里雲開發者社群

最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 很準時,多款小米手機收到MIUI11穩定版推送,老機型又能再戰一年