您好,登錄后才能下訂單哦!
小編給大家分享一下詳解小程序云開發(fā)的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
背景
最近小程序非常的火,應(yīng)公司業(yè)務(wù)發(fā)展要求,開發(fā)維護了幾款小程序,公司開發(fā)的小程序都是由后端提供的接口,開發(fā)繁瑣而復(fù)雜,直到小程序出現(xiàn)了云開發(fā),仔細研讀了文檔之后,欣喜不已,于是我著手開發(fā)了本人的第一款小程序
分析
云開發(fā)為開發(fā)者提供完整的原生云端支持和微信服務(wù)支持,弱化后端和運維概念,無需搭建服務(wù)器,使用平臺提供的 API 進行核心業(yè)務(wù)開發(fā),即可實現(xiàn)快速上線和迭代,同時這一能力,同開發(fā)者已經(jīng)使用的云服務(wù)相互兼容,并不互斥。
優(yōu)勢
無需自建服務(wù)器,數(shù)據(jù)庫,無需自建存儲和CDN
數(shù)據(jù)庫模型很簡單,就是一個json形式的對象格式
調(diào)用服務(wù)端云函數(shù)自動獲取openid,再也沒有繁瑣的授權(quán)登陸流程了,只要進入小程序就是登陸狀態(tài),體驗真的好
開發(fā)迅速,只需要前端就能搞定所有開發(fā)工作
需要解決的問題
數(shù)據(jù)庫切換問題
使用過云開發(fā)的人都發(fā)現(xiàn)云開發(fā)切換數(shù)據(jù)庫環(huán)境是最頭疼的,如果手動去切換容易搞錯,不小心在當前環(huán)境修改了線上數(shù)據(jù)庫數(shù)據(jù)
直到官方出了這個函數(shù)問題也就迎刃而解
cloud.updateConfig({ env: ENV === 'local' ? 'dev-aqijb' : ENV });
我使用的是服務(wù)端云開發(fā)功能,為什么要這樣判斷,因為在開發(fā)工具中ENV = 'local',所以這么判斷一下,保證開發(fā)工具中使用的是測試環(huán)境數(shù)據(jù)庫
使用taro多端開發(fā)框架,借助于webpack,還可以通過process.env.NODE_ENV值區(qū)分當前代碼開發(fā)環(huán)境
await Taro.cloud.init({ env: `${process.env.NODE_ENV === 'development' ? 'dev-aqijb' : 'pro-hljv7'}` /* env: 'pro-hljv7' */ });
這樣可以保證開發(fā)環(huán)境和線上環(huán)境可以使用對應(yīng)環(huán)境的數(shù)據(jù)庫
數(shù)據(jù)庫字段定義問題
因為JS是弱類型語言,不能像typescript那樣靜態(tài)定義變量類型,這樣添加到數(shù)據(jù)庫的字段數(shù)量和字段類型都無法控制
我不想用typescript,能不能實現(xiàn)這樣的功能呢,可以用superstruct庫來實現(xiàn)這個功能
superstruct git地址 點我查看>>
詳細使用案例見下方代碼
函數(shù)文件太多的問題
官方和他人教程的例子都是一個文件對應(yīng)一個云函數(shù),通過開發(fā)體驗我發(fā)現(xiàn)這樣做并不好,當項目有多個表的時候,找個函數(shù)文件真的太難了
我們可以將一個表的增刪改查函數(shù)全部寫入一個文件中
教程: 首先每個云函數(shù)文件中package.json引入superstruct
{ "dependencies": { "wx-server-sdk": "latest", "superstruct": "latest" } }
以下代碼是一個完整的云函數(shù)例子
const cloud = require('wx-server-sdk'); const { struct, superstruct } = require('superstruct'); cloud.init(); //小區(qū)信息 const Model = () => { const db = cloud.database(); const _ = db.command; const collection = db.collection('address'); return { async add(data) { try { data = struct({ name: 'string', //名字 phone: 'string', unit: 'number', //樓單元號 doorNumber: 'string', //門號 communityId: 'string', //小區(qū)id _openid: 'string' //用戶的id //isDefault: 'boolean' //是否默認地址 })(data); } catch (e) { const { path, value, type } = e; const key = path[0]; if (value === undefined) { const error = new Error(`${key}_required`); error.attribute = key; throw error; } if (type === undefined) { const error = new Error(`attribute_${key}_unknown`); error.attribute = key; throw error; } const error = new Error(`${key}_invalid`); error.attribute = key; error.value = value; throw error; } let res = await this.getList({ _openid: data._openid }); if (res.data.length >= 1) { return { msg: '當前只支持保存一個地址' }; } res = await collection.add({ data, createTime: db.serverDate(), updateTime: db.serverDate() }); return res; }, async getAdressById({ _openid, _id }) { const user = await collection .where({ _openid, _id: _.eq(_id) }) .get(); return user; }, //更新指定的id 先判斷手機號修改沒,沒修改直接就改數(shù)據(jù),修改過判斷一下庫中有沒有這條數(shù)據(jù) async update(data) { //更新表的操作 }, //刪除指定id的shop async remove({ _id, _openid }) { //刪除表的操作 }, /** * 獲取商列表 * @param {*} option {category 類別, pagenum 頁碼} */ async getList({ _openid }) { const shopList = await collection .where({ _openid }) .get(); return shopList; } }; }; exports.main = async (event, context) => { const { func, data } = event; const { ENV, OPENID } = cloud.getWXContext(); // 更新默認配置,將默認訪問環(huán)境設(shè)為當前云函數(shù)所在環(huán)境 console.log('ENV', ENV); cloud.updateConfig({ env: ENV === 'local' ? 'dev-aqijb' : ENV }); let res = await Model()[func]({ ...data, _openid: OPENID }); return { ENV, data: res }; };
函數(shù)使用方式
wx.cloud.callFunction({ 'address', //云函數(shù)文件名 data: { func: 'add', //云函數(shù)中定義的方法 data: {} //需要上傳的數(shù)據(jù) } });
圖片 視頻等文件
直接打開云開發(fā)控制臺選擇存儲直接上傳文件,復(fù)制url地址就可以放到代碼中使用了
看完了這篇文章,相信你對“詳解小程序云開發(fā)的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。