支付寶小程序Serverless 阿里云能力API·Serverless云函數(shù)

2020-09-19 14:00 更新

云函數(shù)(FaaS)是一段運行在云端的、輕量的、無關聯(lián)的、并且可重用的代碼。無需管理服務器,只需編寫和上傳代碼,即可獲得對應的數(shù)據(jù)結果。使用云函數(shù)可以使企業(yè)和開發(fā)者不需要擔心服務器或底層運維設施,可以更專注代碼和業(yè)務本身,也可以使代碼進一步解耦,增加其重用性。

云函數(shù)示例

云函數(shù)目錄結構

在 Serverless 小程序工程的 server/functions 目錄下創(chuàng)建云函數(shù)目錄,其中 index.js 是云函數(shù) getImageList 的入口文件。

└── server/
    └── functions
           └── getImageList
                   └── index.js

云函數(shù)代碼結構

以下代碼示例展示了如何從數(shù)據(jù)庫 images 里面查出特定用戶上傳的圖片記錄。云函數(shù)里可以直接通過 API 調用數(shù)據(jù)存儲,文件存儲的服務資源以及其他云函數(shù)。

  • 當云函數(shù)被客戶端或者其他云函數(shù)調用時,可以通過 ctx.args 獲得調用傳來的參數(shù)。
  • 可以通過 ctx.logger 方法打印不同類型的日志信息,然后在云函數(shù)控制臺中查看執(zhí)行日志。
  • 在云函數(shù)內(nèi)通過 ctx.env來 獲取環(huán)境參數(shù),例如 SpaceId、調用來源、客戶端源 IP 和客戶端 UserAgent 等信息。ctx.env 是一個 object,它包含 MP_SPACE_ID(SpaceId),MP_SOURCE(調用來源),MP_USER_AGENT(客戶端User-agent),MP_CLIENT_IP(客戶端IP)。
  • 在云函數(shù)中,您可以直接調用同一環(huán)境(空間)的數(shù)據(jù)存儲和文件存儲服務以及獲取當前請求用戶的基本信息。ctx.mpserverless 在云函數(shù)封裝了小程序的基礎服務, API 使用方式和客戶端一致。
    • 通過 ctx.mpserverless.db 調用云數(shù)據(jù)庫能力,如 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 調用云函數(shù)能力,如 mpserverless.function.invoke('dataAnalytics', {range: 30}) 調用其他云函數(shù)。
    • 通過ctx.cloud調用支付寶/阿里云的各種開放接口能力,包括了支付寶的基礎/會員/支付/安全/營銷等開放接口,如創(chuàng)建小程序二維碼,調用ctx.cloud.base.qrcode.create({urlParam:'pages/index/index', queryParam:'key=value', describe:'我是二維碼'})
    • 通過 ctx.httpclient HTTP 請求方法,無需額外依賴,您就可以請求任何 HTTP 和 HTTPS 協(xié)議的 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 };
      };

創(chuàng)建云函數(shù)

在代碼工程創(chuàng)建云函數(shù)

  1. 新建或打開小程序 Serverless 工程,點擊 server 目錄關聯(lián)對應的云服務空間。

關聯(lián)空間.png

  1. 在 functions 目錄上右鍵選擇新建云函數(shù)。

新建云函數(shù)2.png

在云控制臺創(chuàng)建云函數(shù)

打開小程序云控制臺,在云函數(shù)頁面,點擊新建云函數(shù)。在新建云函數(shù)框里輸入云函數(shù)的函數(shù)名。

新建云函數(shù).jpg

部署云函數(shù)

編寫云函數(shù)代碼后,您需要將云函數(shù)代碼在代碼工程里或者在云控制臺上傳。

在代碼工程部署云函數(shù)

編寫云函數(shù)代碼后,右鍵點擊已創(chuàng)建的云函數(shù),選擇部署云函數(shù)。

部署云函數(shù).png

在云控制臺部署云函數(shù)

1.打開小程序云控制臺,在云函數(shù)頁面,單擊已創(chuàng)建的函數(shù)名稱鏈接。

2.在發(fā)布管理頁簽,單擊上傳js包或更新js包,然后選擇要上傳的代碼包。

上傳的代碼包必須滿足以下要求:

  • 代碼包的名稱必須和在控制臺上創(chuàng)建的函數(shù)名稱一致。
  • 代碼包必須是 .zip 文件。
  • 上傳的代碼包必須包含 index.js 文件。
  • 如果引用了第三方包,代碼包里必須包含 node_modules。

3.上傳成功后,單擊代碼部署。

云控制臺部署.jpg

調用云函數(shù)

1.在小程序項目的根目錄執(zhí)行以下命令安裝 SDK。

npm install @alicloud/mpserverless-sdk --save

2.在 app.js 中初始化 SDK(全局只需初始化一次)。

import MPServerless from '@alicloud/mpserverless-sdk';

 
my.serverless = my.serverless || new MPServerless({
  uploadFile: my.uploadFile,
  request: my.request,
  getAuthCode: my.getAuthCode,
}, {
  appId: '',
  spaceId: '',
  clientSecret: '',
  endpoint: ''});

3.在小程序頁面您可以使用 my.serverless.function.invoke 方法調用上述定義的云函數(shù)。

my.serverless.function.invoke('getImageList', {     
  username: 'Vincent',
}).then((res) => {
  if (res.success && res.result) {
    this.setData({ imageList: res.result.images });
  }
}).catch(console.error);

開發(fā)者技術支持群

加入支付寶小程序 Serverless 開發(fā)者群參與討論,釘釘搜索群號:21922182,或使用釘釘掃描二維碼加入。

image

支付寶掃描以下二維碼登陸官方小程序【小程序云開發(fā)助手】,獲取更多云開發(fā)教程以及在線體驗云開發(fā)。

推廣碼.jpg

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號