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