天天看點

雲函數使用

雲函數使用

雲函數開發

雲函數(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。

  1. 上傳成功後,單擊代碼部署。
    雲函數使用

調用雲函數

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);           

課程作業

支付寶掃碼登陸官方小程式【小程式雲開發助手】,在 學習 > 訓練營打卡作業 > 雲函數使用 中送出作業。

雲函數使用