天天看點

從入門到實戰微信小程式雲開發

1、微信雲開發介紹

小程式·雲開發是官方提供的原生 Serverless 雲能力。它提供了一整套完整、标準化的開發流程。弱化了後端以及運維的概。無需搭建伺服器,使用微信接口即可內建原生雲服務,也可以獲得開箱即用的完整的原生雲端支援和免鑒權微信服務支援。

2、功能與優勢

能力:

  • 雲函數:在雲端運作的代碼,微信私有協定天然鑒權,開發者隻需編寫自身業務邏輯代碼
  • 資料庫:既可在小程式前端操作,也能在雲函數中讀寫的 JSON 資料庫
  • 存儲:可在小程式前端上傳/下載下傳雲端檔案,在雲開發控制台可視化管理

優勢:

  • 無需搭建伺服器,快速建構小程式
  • 免登入,免鑒權調用微信開放服務
  • 統一開發多端應用
  • 按量計費,成本更低

官方介紹: 官方介紹和視訊

3、功能介紹

3.1 雲資料庫

雲開發提供了一個 JSON 資料庫,顧名思義,資料庫中的每條記錄都是一個 JSON 格式的對象。一個資料庫可以有多個集合(相當于關系型資料中的表),集合可看做一個 JSON 數組,數組中的每個對象就是一條記錄,記錄的格式是 JSON 對象。

從入門到實戰微信小程式雲開發

3.2 雲存儲

雲開發提供了一塊存儲空間,提供了上傳檔案到雲端、帶權限管理的雲端下載下傳能力,開發者可以在小程式端和雲函數端通過 API 使用雲存儲功能。

從入門到實戰微信小程式雲開發

3.3 雲函數

雲函數是一段運作在雲端的代碼,無需管理伺服器,在開發工具内編寫、一鍵上傳部署即可運作後端代碼。

小程式内提供了專門用于雲函數調用的 API。開發者可以在雲函數内使用 wx-server-sdk 提供的 getWXContext 方法擷取到每次調用的上下文(appid、openid 等),無需維護複雜的鑒權機制,即可擷取天然可信任的使用者登入态(openid)。

從入門到實戰微信小程式雲開發

3.4 其他

營運 分析、雲托管、雲調用、HTTP API

參考位址

4、 代碼講解

本次介紹小程式雲開發以一個todolist的項目來進行實際的講解。代碼位址: github

4.1 入口函數:

// 雲函數入口檔案 /cloudfunctions/getOpenId/index.js
const cloud = require('wx-server-sdk')

cloud.init({ // 初始化雲開發環境
  env: cloud.DYNAMIC_CURRENT_ENV // 目前環境的常量
})
const db = cloud.database()
// 雲函數入口函數
exports.main = async (event, context) => {
  // 預置建立集合,如果存在則自動失敗跳過,自己上架時可以去掉
  try{ await db.createCollection('todo') }catch(e){}
  const wxContext = cloud.getWXContext()
  // 傳回目前使用者的身份資訊,用于資料庫記錄和查詢
  return {
    event,
    openid: wxContext.OPENID,
    fromopenid: wxContext.FROM_OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}
           

4.2 增删改查

新增

const db = await getApp().database()
 // 在資料庫中建立待辦事項,并填入已編輯對資訊
 db.collection(getApp().globalData.collection).add({
   data: {
     title: this.data.title,       // 待辦标題
     desc: this.data.desc,         // 待辦描述
     files: this.data.files,       // 待辦附件清單
     freq: Number(this.data.freq), // 待辦完成情況(提醒頻率)
     star: false
   }
 })
           

删除

// 在資料庫中删除一條id資料 
 db.collection(getApp().globalData.collection).where({
   _id: this.data._id
 }).remove()
           

修改

// 校驗通過後,根據待辦 _id,更新待辦資訊
db.collection(getApp().globalData.collection).where({
  _id: this.data._id
}).update({
  data: {
    title: this.data.title,
    desc: this.data.desc,
    files: this.data.files,
    freq: Number(this.data.freq)
  }
})
           

查詢

// 在資料中查詢查詢該使用者的資訊
 db.collection(getApp().globalData.collection).where({
   _openid: openid
 })