• <sub id="xcyjv"></sub><nav id="xcyjv"><code id="xcyjv"><meter id="xcyjv"></meter></code></nav>
      <nav id="xcyjv"></nav>
    1. <form id="xcyjv"><th id="xcyjv"></th></form><nav id="xcyjv"><mark id="xcyjv"></mark></nav>

        詳解小程序云開發攻略(解決最棘手的問題)

         更新時間:2019年09月30日 10:26:44   作者:志軍   我要評論
        這篇文章主要介紹了詳解小程序云開發攻略(解決最棘手的問題),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

        背景

        最近小程序非常的火,應公司業務發展要求,開發維護了幾款小程序,公司開發的小程序都是由后端提供的接口,開發繁瑣而復雜,直到小程序出現了云開發,仔細研讀了文檔之后,欣喜不已,于是我著手開發了本人的第一款小程序

        分析

        云開發為開發者提供完整的原生云端支持和微信服務支持,弱化后端和運維概念,無需搭建服務器,使用平臺提供的 API 進行核心業務開發,即可實現快速上線和迭代,同時這一能力,同開發者已經使用的云服務相互兼容,并不互斥。

        優勢

        • 無需自建服務器,數據庫,無需自建存儲和CDN
        • 數據庫模型很簡單,就是一個json形式的對象格式
        • 調用服務端云函數自動獲取openid,再也沒有繁瑣的授權登陸流程了,只要進入小程序就是登陸狀態,體驗真的好
        • 開發迅速,只需要前端就能搞定所有開發工作

        需要解決的問題

        數據庫切換問題

        使用過云開發的人都發現云開發切換數據庫環境是最頭疼的,如果手動去切換容易搞錯,不小心在當前環境修改了線上數據庫數據

        直到官方出了這個函數問題也就迎刃而解

        cloud.updateConfig({
          env: ENV === 'local' ? 'dev-aqijb' : ENV
         });
        

        我使用的是服務端云開發功能,為什么要這樣判斷,因為在開發工具中ENV = 'local',所以這么判斷一下,保證開發工具中使用的是測試環境數據庫

        使用taro多端開發框架,借助于webpack,還可以通過process.env.NODE_ENV值區分當前代碼開發環境

        await Taro.cloud.init({
            env: `${process.env.NODE_ENV === 'development' ? 'dev-aqijb' : 'pro-hljv7'}`
            /* env: 'pro-hljv7' */
           });

        這樣可以保證開發環境和線上環境可以使用對應環境的數據庫

        數據庫字段定義問題

        因為JS是弱類型語言,不能像typescript那樣靜態定義變量類型,這樣添加到數據庫的字段數量和字段類型都無法控制

        我不想用typescript,能不能實現這樣的功能呢,可以用superstruct庫來實現這個功能

        詳細使用案例見下方代碼

        函數文件太多的問題

        官方和他人教程的例子都是一個文件對應一個云函數,通過開發體驗我發現這樣做并不好,當項目有多個表的時候,找個函數文件真的太難了
        我們可以將一個表的增刪改查函數全部寫入一個文件中

        教程: 首先每個云函數文件中package.json引入superstruct

        {
         "dependencies": {
          "wx-server-sdk": "latest",
          "superstruct": "latest"
         }
        }
        

        以下代碼是一個完整的云函數例子

        const cloud = require('wx-server-sdk');
        const { struct, superstruct } = require('superstruct');
        cloud.init();
        //小區信息
        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', //小區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 先判斷手機號修改沒,沒修改直接就改數據,修改過判斷一下庫中有沒有這條數據
          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();
         // 更新默認配置,將默認訪問環境設為當前云函數所在環境
         console.log('ENV', ENV);
         cloud.updateConfig({
          env: ENV === 'local' ? 'dev-aqijb' : ENV
         });
         let res = await Model()[func]({ ...data, _openid: OPENID });
         return {
          ENV,
          data: res
         };
        };
        
        

        函數使用方式

        wx.cloud.callFunction({
           'address', //云函數文件名
           data: {
            func: 'add', //云函數中定義的方法
            data: {} //需要上傳的數據
           }
          });
        

        圖片 視頻等文件

        直接打開云開發控制臺選擇存儲直接上傳文件,復制url地址就可以放到代碼中使用了

        以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

        相關文章

        最新評論

        01彩票网app
      1. <sub id="xcyjv"></sub><nav id="xcyjv"><code id="xcyjv"><meter id="xcyjv"></meter></code></nav>
          <nav id="xcyjv"></nav>
        1. <form id="xcyjv"><th id="xcyjv"></th></form><nav id="xcyjv"><mark id="xcyjv"></mark></nav>
            吉林长春 | 台南 | 曹县 | 黑龙江哈尔滨 | 承德 | 昆山 | 儋州 | 南阳 | 中山 | 澳门澳门 | 淮北 | 白城 | 仁怀 | 湛江 | 宜春 | 和田 | 温岭 | 吉林长春 | 乐清 | 陕西西安 | 阿克苏 | 海拉尔 | 抚州 | 庄河 | 济源 | 朔州 | 安庆 | 桐乡 | 陇南 | 济南 | 巢湖 | 景德镇 | 莱州 | 六安 | 铁岭 | 迁安市 | 山南 | 柳州 | 潍坊 | 牡丹江 | 东营 | 上饶 | 海丰 | 陇南 | 广元 | 运城 | 图木舒克 | 新余 | 三亚 | 辽阳 | 金坛 | 桂林 | 晋江 | 瓦房店 | 临汾 | 西藏拉萨 | 濮阳 | 酒泉 | 果洛 | 内蒙古呼和浩特 | 东台 | 六安 | 泸州 | 三河 | 鄂尔多斯 | 克拉玛依 | 河南郑州 | 泉州 | 诸暨 | 莱芜 | 柳州 | 苍南 | 湘西 | 芜湖 | 永新 | 姜堰 | 山南 | 灌云 | 三明 | 深圳 | 嘉峪关 | 淮北 | 日土 | 黄冈 | 曲靖 | 鹤壁 | 海东 | 武安 | 潜江 | 淮北 | 榆林 | 承德 | 陇南 | 池州 | 玉环 | 惠州 | 宁国 | 福建福州 | 沭阳 | 保山 | 灌云 | 白银 | 定安 | 晋中 | 乳山 | 金坛 | 香港香港 | 中卫 | 呼伦贝尔 | 泗洪 | 西双版纳 | 伊春 | 永新 | 黑河 | 凉山 | 文昌 | 泗阳 | 玉溪 | 宜都 | 昭通 | 澳门澳门 | 新余 | 海门 | 台中 | 汝州 | 阳泉 | 揭阳 | 湖北武汉 | 日照 | 大丰 | 淮南 | 建湖 | 涿州 | 南充 | 烟台 | 锡林郭勒 | 启东 | 海南 | 海西 | 安庆 | 盘锦 | 绥化 | 南京 | 阿拉尔 | 靖江 | 新乡 | 十堰 | 馆陶 | 乌兰察布 | 德州 | 仁怀 | 潮州 | 克拉玛依 | 庄河 | 随州 | 汉川 | 株洲 | 晋城 | 乐山 | 三沙 | 德宏 | 和田 | 大丰 | 大同 | 无锡 | 贺州 | 鹤岗 | 台州 | 吉林长春 | 那曲 | 香港香港 | 永康 | 明港 | 贵州贵阳 | 咸阳 | 阜新 | 阿坝 | 图木舒克 | 泗洪 | 三亚 | 铜仁 | 库尔勒 | 漯河 | 保山 | 河源 | 山西太原 | 黄冈 | 克孜勒苏 | 克拉玛依 | 池州 | 桐乡 | 绵阳 | 寿光 | 改则 | 溧阳 | 六安 | 博尔塔拉 | 浙江杭州 | 台州 | 邹平 | 文昌 | 青州 | 达州 | 吉林 | 延边 | 广元 | 昌都 | 沭阳 | 霍邱 | 玉树 | 新乡 | 海北 | 龙岩 | 西双版纳 | 云南昆明 | 济南 | 黄南 | 燕郊 | 中山 | 海南 | 宿迁 | 慈溪 | 蓬莱 | 襄阳 | 焦作 | 宁国 | 盘锦 | 黄南 | 临沂 | 灵宝 | 孝感 | 萍乡 | 章丘 | 商洛 | 中山 | 嘉善 | 桐乡 | 丹阳 | 仁寿 | 河北石家庄 | 景德镇 | 肥城 | 河池 | 海丰 | 新泰 | 五家渠 | 唐山 | 台北 | 牡丹江 | 聊城 | 邢台 | 青海西宁 | 吉林长春 | 温州 | 定州 | 朔州 | 如东 | 长垣 | 自贡 | 通辽 | 铜陵 | 湖州 | 大兴安岭 | 吴忠 | 余姚 | 吴忠 | 海西 | 莒县 | 石嘴山 | 铁岭 | 图木舒克 | 金华 | 鸡西 | 日喀则 | 揭阳 | 张家界 | 安阳 | 河南郑州 | 浙江杭州 | 南平 | 芜湖 | 黔南 | 乌海 | 孝感 | 宜宾 | 海东 | 台湾台湾 | 辽宁沈阳 | 通化 | 兴安盟 | 山南 | 锡林郭勒 | 海西 | 临夏 | 双鸭山 | 扬中 | 慈溪 | 伊犁 | 玉树 | 铁岭 | 三明 | 大兴安岭 | 黄山 | 台山 | 桐城 | 公主岭 | 盐城 | 宿州 | 涿州 | 宝鸡 | 忻州 | 馆陶 | 惠东 | 崇左 | 安岳 | 保定 | 云浮 | 黑河 | 日照 | 贵港 | 松原 | 临汾 | 珠海 | 日喀则 | 杞县 | 陇南 | 宝应县 | 喀什 | 桐乡 | 白沙 | 陕西西安 | 海南 | 鄂尔多斯 | 清徐 | 六安 | 乳山 | 果洛 | 安岳 | 澄迈 | 遵义 | 阜新 | 景德镇 | 汕尾 | 济源 | 万宁 | 宁波 | 杞县 | 泰兴 | 淄博 | 库尔勒 | 灵宝 | 陕西西安 | 昌吉 | 寿光 | 诸暨 | 牡丹江 | 汝州 | 德阳 | 亳州 | 珠海 | 长兴 | 张掖 | 忻州 | 怒江 | 海丰 | 泉州 | 朝阳 | 青海西宁 | 乳山 | 丹阳 | 昌吉 | 铜陵 | 迪庆 | 武夷山 | 新余 | 大连 | 吕梁 | 湖北武汉 | 广饶 | 玉树 | 临夏 | 四川成都 | 深圳 | 蓬莱 | 吐鲁番 | 巴中 | 中卫 | 台中 | 泰兴 | 浙江杭州 | 宝应县 | 定安 | 七台河 | 东方 | 白山 | 九江 | 楚雄 | 中山 | 琼海 | 铜陵 | 临猗 | 靖江 | 云南昆明 | 青海西宁 | 莆田 | 山西太原 | 阿勒泰 | 宁夏银川 | 库尔勒 | 临沧 | 琼中 | 厦门 | 海西 | 汝州 | 博尔塔拉 | 宁夏银川 | 吴忠 | 安吉 | 江西南昌 | 迁安市 | 改则 | 青州 | 内蒙古呼和浩特 | 吐鲁番 | 章丘 | 恩施 | 池州 | 阿坝 | 长垣 | 丹阳 | 鞍山 | 瓦房店 | 迪庆 | 湖州 | 呼伦贝尔 | 桐乡 | 锡林郭勒 | 随州 | 金昌 | 济南 | 白城 | 张家界 | 来宾 | 锡林郭勒 | 朝阳 | 龙岩 | 娄底 | 河池 | 永康 | 蚌埠 | 宁波 | 昌吉 | 庄河 | 宁波 | 新乡 | 海南 | 桐乡 | 绥化 | 台山 | 简阳 | 泉州 | 赤峰 | 柳州 | 商丘 | 桓台 | 杞县 | 雄安新区 | 衡阳 | 绥化 | 许昌 | 吉安 | 东莞 | 台湾台湾 | 丹东 | 荣成 | 海拉尔 | 茂名 | 宁德 | 滨州 | 招远 | 大丰 | 湘潭 | 昭通 | 图木舒克 | 内蒙古呼和浩特 | 巴彦淖尔市 | 铜仁 | 宁国 | 唐山 | 乌兰察布 | 贵港 | 莒县 | 内蒙古呼和浩特 | 盐城 | 佳木斯 | 防城港 | 南京 | 资阳 | 海南海口 | 三沙 | 德州 | 揭阳 | 襄阳 | 河北石家庄 | 玉林 | 资阳 | 娄底 | 丹东 | 乳山 | 涿州 | 襄阳 | 日照 | 呼伦贝尔 | 张家界 | 六盘水 | 嘉兴 | 承德 | 莱芜 | 江苏苏州 | 日照 | 白银 | 厦门 | 武安 | 石河子 | 江苏苏州 | 齐齐哈尔 | 红河 | 西藏拉萨 | 鄂尔多斯 | 澳门澳门 | 苍南 | 昌吉 | 广元 | 柳州 | 肇庆 | 庆阳 | 陇南 | 娄底 | 东方 | 陕西西安 | 神木 | 库尔勒 | 邳州 | 宁德 | 眉山 | 南阳 | 防城港 | 巴中 | 眉山 | 龙岩 | 阿拉尔 | 定西 | 贺州 | 海拉尔 | 吴忠 | 衡阳 | 赣州 | 亳州 | 漳州 | 邹城 | 大同 | 庄河 | 石狮 | 昭通 | 来宾 | 济南 | 鄂尔多斯 | 海安 | 眉山 | 杞县 | 济源 | 阿克苏 | 曹县 | 台北 | 宿迁 | 常州 | 湖北武汉 | 三门峡 | 白城 | 迪庆 | 日喀则 | 四平 | 临汾 | 图木舒克 | 鞍山 | 咸宁 | 垦利 | 固原 | 西藏拉萨 | 吐鲁番 | 如东 | 阳春 | 哈密 | 三明 | 黄冈 | 日土 | 潍坊 | 东方 | 本溪 | 永州 | 黑龙江哈尔滨 | 厦门 | 延安 | 林芝 | 丽江 | 金昌 | 塔城 | 兴安盟 | 泰州 | 鹤岗 | 鸡西 | 博尔塔拉 | 阿勒泰 | 江苏苏州 | 晋江 | 漯河 | 铜陵 | 海丰 | 大兴安岭 | 石嘴山 | 漯河 | 吕梁 | 荆门 | 巢湖 | 曹县 | 深圳 | 海宁 | 澳门澳门 | 宜春 | 东方 | 天长 | 如东 | 佛山 | 绍兴 | 朔州 | 东方 | 邢台 | 白城 | 大理 | 巴中 | 文昌 | 天水 | 毕节 | 酒泉 | 连云港 | 廊坊 | 清徐 | 大兴安岭 | 陕西西安 | 临海 | 岳阳 | 灌云 | 无锡 | 东阳 | 秦皇岛 | 丽水 | 湛江 | 霍邱 | 阿拉善盟 | 通化 | 广汉 | 桂林 | 陕西西安 | 哈密 | 南阳 | 武安 | 牡丹江 | 黔南 | 广汉 | 广汉 | 陕西西安 | 许昌 | 抚州 | 安顺 | 赣州 | 新泰 | 嘉峪关 | 开封 | 东海 | 嘉峪关 | 莱州 | 南充 | 通辽 | 喀什 | 长垣 | 和县 | 龙口 | 宁波 | 东海 | 雅安 | 嘉兴 | 六安 | 威海 | 邹城 | 海门 | 阳江 | 赤峰 | 潍坊 | 泰安 | 雄安新区 | 阿拉尔 | 陕西西安 | 福建福州 | 和县 | 石狮 | 延边 | 荆州 | 内蒙古呼和浩特 | 泸州 | 兴化 | 简阳 | 安阳 | 安徽合肥 | 柳州 | 三沙 | 广元 | 梧州 | 蓬莱 | 东阳 | 通辽 | 四川成都 | 七台河 | 博尔塔拉 | 简阳 | 延边 | 淮北 | 盐城 | 长垣 | 潮州 | 天门 | 松原 | 温州 | 迪庆 | 黔西南 | 正定 | 温岭 | 湛江 | 阿拉尔 | 黄石 | 牡丹江 | 贵港 | 信阳 | 潮州 | 伊春 | 宜宾 | 海南海口 | 那曲 | 陕西西安 | 自贡 | 仁怀 | 改则 | 萍乡 | 广汉 | 深圳 | 湖北武汉 | 泰兴 | 任丘 | 宁夏银川 | 海安 | 广西南宁 | 南充 | 乐平 | 晋江 | 襄阳 | 赤峰 | 惠州 | 南阳 | 安顺 | 焦作 | 海拉尔 | 佳木斯 | 荆州 | 天水 | 那曲 | 大庆 | 垦利 | 海南 | 正定 | 泰州 | 贺州 | 宜宾 | 荣成 | 赤峰 | 洛阳 | 黑龙江哈尔滨 | 海拉尔 | 淮北 | 肥城 | 锦州 | 广州 | 仙桃 | 芜湖 | 崇左 | 阳江 | 黄冈 | 日土 | 阳春 | 九江 | 芜湖 | 凉山 | 海东 | 山南 | 大庆 | 顺德 | 毕节 | 昭通 | 泗阳 | 果洛 | 湘西 | 鹤壁 | 河源 | 昆山 | 龙口 | 钦州 | 丹东 | 扬中 | 定西 | 天水 | 防城港 | 台湾台湾 | 吉安 | 燕郊 | 芜湖 | 克拉玛依 | 三明 | 海宁 | 保亭 | 榆林 | 仙桃 | 海丰 | 甘南 | 巴中 | 齐齐哈尔 | 南平 | 张家界 | 三门峡 | 吉林长春 | 张北 | 永州 | 辽阳 | 三河 | 如东 | 吉林 | 茂名 | 吐鲁番 | 宿州 | 玉溪 | 博尔塔拉 | 贵港 | 乌兰察布 | 启东 | 伊春 | 毕节 | 安顺 | 武夷山 | 安康 | 济南 | 荣成 | 香港香港 | 泗洪 | 淮南 | 绵阳 | 灌南 | 库尔勒 | 琼海 | 甘南 | 马鞍山 | 象山 | 钦州 | 牡丹江 | 伊犁 | 任丘 | 平凉 | 和县 | 济宁 | 通化 | 楚雄 | 图木舒克 | 禹州 | 云南昆明 | 绍兴 | 南安 | 忻州 | 伊犁 | 定西 | 湖南长沙 | 鹤岗 | 沭阳 | 漳州 | 襄阳 | 百色 | 常州 | 黄南 | 衢州 | 曹县 | 博尔塔拉 | 灌南 | 惠州 | 保山 | 盘锦 | 郴州 | 达州 | 通辽 | 通辽 | 遵义 | 鄂尔多斯 | 普洱 | 三亚 | 攀枝花 | 台湾台湾 | 东海 | 阿拉尔 | 扬中 | 曹县 | 朝阳 | 阿克苏 | 鄂尔多斯 | 南阳 | 鹤岗 | 琼海 | 玉树 | 海安 | 昌吉 | 眉山 | 曲靖 | 兴安盟 | 天水 | 泰安 | 昭通 | 莒县 | 乐平 | 库尔勒 | 图木舒克 | 德宏 | 烟台 | 台中 | 儋州 | 东台 | 抚州 | 佳木斯 | 黔西南 | 白城 | 九江 | 潜江 | 临海 | 公主岭 | 汉川 | 乌兰察布 | 石狮 | 白银 | 黄石 | 黔东南 | 滕州 | 宁国 | 佛山 | 佳木斯 | 靖江 | 桂林 | 石河子 | 中山 | 宜都 | 阿勒泰 | 来宾 | 永州 | 青海西宁 | 辽宁沈阳 | 商洛 | 林芝 | 新乡 | 新乡 | 灌南 | 余姚 | 泉州 | 鹤岗 | 抚州 | 昌吉 | 临海 | 河南郑州 | 灌南 | 漯河 | 如皋 | 湘西 | 黔南 | 安庆 | 东营 | 双鸭山 | 青海西宁 | 克孜勒苏 | 五家渠 | 盘锦 | 武安 | 荆州 | 和县 | 海丰 | 图木舒克 | 张家界 | 任丘 | 三亚 | 宜宾 | 赤峰 | 温岭 | 莆田 | 海丰 | 凉山 | 荣成 | 佛山 | 江门 | 博罗 | 瓦房店 | 乐平 | 平凉 | 南京 | 如东 | 七台河 | 杞县 | 德阳 | 衢州 | 贺州 | 玉溪 | 韶关 | 海拉尔 | 遵义 | 甘肃兰州 | 聊城 | 承德 | 周口 | 黄石 | 嘉善 | 南阳 | 双鸭山 | 六安 | 赤峰 | 莱芜 | 儋州 | 台中 | 山东青岛 | 如东 | 象山 | 广安 | 滁州 | 德宏 | 萍乡 | 衡水 | 锡林郭勒 | 长兴 | 南平 | 齐齐哈尔 | 北海 | 临沧 | 大兴安岭 | 庆阳 | 吉林 | 娄底 | 中卫 | 博罗 | 三亚 | 永新 | 黔西南 | 保定 | 绍兴 | 五家渠 | 绥化 | 永康 | 丽江 | 乌兰察布 | 承德 | 三沙 | 梧州 | 和县 | 深圳 | 海丰 | 龙岩 | 兴安盟 | 保山 | 宝鸡 | 凉山 | 嘉善 | 商丘 | 铁岭 | 河池 |