雲函數開發
雲函數(FaaS)是一段運作在雲端的、輕量的、無關聯的、并且可重用的代碼。無需管理伺服器,隻需編寫和上傳代碼,即可獲得對應的資料結果。使用雲函數可以使企業和開發者不需要擔心伺服器或底層運維設施,可以更專注代碼和業務本身,也可以使代碼進一步解耦,增加其重用性。
雲函數示例
雲函數目錄結構
在Serverless小程式工程的server/functions目錄下建立雲函數目錄,其中index.js是雲函數getImageList的入口檔案。
└── server/
└── functions
└── getImageList
└── index.js
雲函數代碼結構
以下代碼示例展示了如何從資料庫images裡面查出特定使用者上傳的圖檔記錄。雲函數裡可以直接通過API調用資料存儲,檔案存儲的服務資源以及其他雲函數。
• 當雲函數被用戶端或者其他雲函數調用時,可以通過ctx.args獲得調用傳來的參數。
• 可以通過ctx.logger方法列印不同類型的日志資訊,然後在雲函數控制台中檢視執行日志。
• 在雲函數内通過ctx.env來擷取環境參數,例如SpaceId、調用來源、用戶端源IP和用戶端UserAgent等資訊。ctx.env是一個object,它包含MP_SPACE_ID(SpaceId),MP_SOURCE(調用來源),MP_USER_AGENT(用戶端User-agent),MP_CLIENT_IP(用戶端IP)。
• 在雲函數中,您可以直接調用同一環境(空間)的資料存儲和檔案存儲服務以及擷取目前請求使用者的基本資訊。ctx.mpserverless在雲函數封裝了小程式的基礎服務, API使用方式和用戶端一緻。
通過ctx.mpserverless.db調用雲資料庫能力,如ctx.mpserverless.db.collection('user').find({ uid: args.uid })。
通過ctx.mpserverless.file調用檔案存儲能力,如ctx.mpserverless.file.deleteFile(args.filePathUrl)。
通過ctx.mpserverless.user擷取目前通路使用者基本資訊,如ctx.mpserverless.user.getInfo()。
通過ctx.mpserverless.function調用雲函數能力,如mpserverless.function.invoke('dataAnalytics', {range: 30})調用其他雲函數。
通過ctx.httpclient HTTP 請求方法,無需額外依賴,您就可以請求任何 HTTP 和 HTTPS 協定的 Web 服務。如ctx.httpclient.request('
https://www.alipay.com/x/notFound.htm')。
module.exports = async (ctx) => {
ctx.logger.info('%s %s', ctx.env.MP_SPACE_ID, ctx.args.username);
const images = await ctx.mpserverless.db.collection('images').find({ owner: ctx.args.username });
return { images };
};
建立雲函數
在代碼工程建立雲函數
1.建立或打開小程式Serverless工程,點選server目錄關聯對應的雲服務空間。

2.在functions目錄上右鍵選擇建立雲函數。
在雲控制台建立雲函數
打開小程式雲控制台,在雲函數頁面,點選建立雲函數。在建立雲函數框裡輸入雲函數的函數名。
部署雲函數
編寫雲函數代碼後,您需要将雲函數代碼在代碼工程裡或者在雲控制台上傳。
在代碼工程部署雲函數
編寫雲函數代碼後,右鍵點選已建立的雲函數,選擇部署雲函數。
在雲控制台部署雲函數
1.打開小程式雲控制台,在雲函數頁面,單擊已建立的函數名稱連結。
2.在釋出管理頁簽,單擊上傳js包或更新js包,然後選擇要上傳的代碼包。
上傳的代碼包必須滿足以下要求:
• 代碼包的名稱必須和在控制台上建立的函數名稱一緻。
• 代碼包必須是.zip檔案。
• 上傳的代碼包必須包含index.js檔案。
• 如果引用了第三方包,代碼包裡必須包含node_modules。
- 上傳成功後,單擊代碼部署。
【小程式雲七天學習訓練營】Day4
調用雲函數
1.在小程式項目的根目錄執行以下指令安裝 SDK。
npm install @alicloud/mpserverless-sdk --save
2.在 app.js 中初始化SDK(全局隻需初始化一次)。
// 1. 引入必要的 sdk
import MPServerless from '@alicloud/mpserverless-sdk';
// 2. 在 app.js 中對 sdk 進行初始化
// 2.1 初始化 MPServerless
my.serverless = my.serverless || new MPServerless({
uploadFile: my.uploadFile,
request: my.request,
getAuthCode: my.getAuthCode,
}, {
// 2.2 參數能在小程式雲服務空間詳情中擷取
appId: '',
spaceId: '',
clientSecret: '',
endpoint: ''
});
3.在小程式頁面您可以使用mpserverless.function.invoke方法調用上述定義的雲函數。
// 調用雲函數getImageList
my.serverless.function.invoke('getImageList', {
username: 'Vincent',
}).then((res) => {
if (res.success && res.result) {
this.setData({ imageList: res.result.images });
}
}).catch(console.error);
今日作業
編寫一個雲函數上傳部署,在雲函數裡查詢雲資料庫裡産品表的所有資料。并在小程式頁面端調用該雲函數,并将傳回的資料以清單形式顯示在小程式頁面。