最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

背景

最近小程序非常的火,應(yīng)公司業(yè)務(wù)發(fā)展要求,開發(fā)維護(hù)了幾款小程序,公司開發(fā)的小程序都是由后端提供的接口,開發(fā)繁瑣而復(fù)雜,直到小程序出現(xiàn)了云開發(fā),仔細(xì)研讀了文檔之后,欣喜不已,于是我著手開發(fā)了本人的第一款小程序

分析

云開發(fā)為開發(fā)者提供完整的原生云端支持和微信服務(wù)支持,弱化后端和運維概念,無需搭建服務(wù)器,使用平臺提供的 API 進(jìn)行核心業(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)登陸流程了,只要進(jìn)入小程序就是登陸狀態(tài),體驗真的好
  • 開發(fā)迅速,只需要前端就能搞定所有開發(fā)工作

需要解決的問題

數(shù)據(jù)庫切換問題

使用過云開發(fā)的人都發(fā)現(xiàn)云開發(fā)切換數(shù)據(jù)庫環(huán)境是最頭疼的,如果手動去切換容易搞錯,不小心在當(dāng)前環(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ū)分當(dāng)前代碼開發(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)這個功能

詳細(xì)使用案例見下方代碼

函數(shù)文件太多的問題

官方和他人教程的例子都是一個文件對應(yīng)一個云函數(shù),通過開發(fā)體驗我發(fā)現(xiàn)這樣做并不好,當(dāng)項目有多個表的時候,找個函數(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' //是否默認(rèn)地址
    })(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: '當(dāng)前只支持保存一個地址' };
   }
   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();
 // 更新默認(rèn)配置,將默認(rèn)訪問環(huán)境設(shè)為當(dāng)前云函數(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地址就可以放到代碼中使用了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript fullscreen全屏實現(xiàn)代碼

    javascript fullscreen全屏實現(xiàn)代碼

    用了實現(xiàn)打開一個滿屏的代碼
    2009-04-04
  • BootStrap 動態(tài)添加驗證項和取消驗證項的實現(xiàn)方法

    BootStrap 動態(tài)添加驗證項和取消驗證項的實現(xiàn)方法

    這篇文章主要介紹了BootStrap 動態(tài)添加驗證項和取消驗證項的實現(xiàn)方法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • javascript 上下banner替換具體實現(xiàn)

    javascript 上下banner替換具體實現(xiàn)

    這篇文章介紹了javascript 上下banner替換具體實現(xiàn),有需要的朋友可以參考一下
    2013-11-11
  • 用JavaScript腳本實現(xiàn)Web頁面信息交互

    用JavaScript腳本實現(xiàn)Web頁面信息交互

    這篇文章主要介紹了用JavaScript腳本實現(xiàn)Web頁面信息交互
    2006-10-10
  • 關(guān)鍵字空格替換為逗號的js代碼

    關(guān)鍵字空格替換為逗號的js代碼

    這個功能主要是方便我們在發(fā)布文章時填寫關(guān)鍵字的時候,不用切換為英文狀態(tài)輸入逗號,他可以將中文逗號和空格統(tǒng)一轉(zhuǎn)換為英文逗號,提高工作效率。
    2008-11-11
  • js實現(xiàn)圖片放大和拖拽特效代碼分享

    js實現(xiàn)圖片放大和拖拽特效代碼分享

    這篇文章主要介紹了js實現(xiàn)圖片放大和拖拽特效,除了點擊放大和縮小按鈕來控制圖片的放大縮小,還可以使用鼠標(biāo)的滾輪控制圖片的縮放,推薦給大家,有需要的小伙伴可以參考下
    2015-09-09
  • TypeScript聲明文件的語法與場景詳解

    TypeScript聲明文件的語法與場景詳解

    使用ts進(jìn)行開發(fā)的時候,不可避免的需要引用第三方的 JS 的庫,但是默認(rèn)情況下TS是不認(rèn)識我們引入的這些JS庫的,所以在使用這些JS庫的時候,我們就要通過聲明文件告訴TS它是什么,這篇文章主要給大家介紹了關(guān)于TypeScript聲明文件的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 微信小程序日歷效果

    微信小程序日歷效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序日歷效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 詳解JS判斷頁面是在手機端還是在PC端打開的方法

    詳解JS判斷頁面是在手機端還是在PC端打開的方法

    這篇文章主要介紹了JS判斷頁面是手機端還是在PC端打開的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript實現(xiàn)簡單的計算器

    JavaScript實現(xiàn)簡單的計算器

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)簡單的計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01

最新評論

临桂县| 边坝县| 孝义市| 景泰县| 汾阳市| 郧西县| 遂昌县| 双流县| 库尔勒市| 伊吾县| 隆回县| 图片| 新巴尔虎右旗| 龙口市| 四子王旗| 靖远县| 会昌县| 屏东市| 大庆市| 宁远县| 三亚市| 潼关县| 天祝| 苗栗县| 岳西县| 夏邑县| 柳江县| 南雄市| 通化县| 辽宁省| 宁强县| 都安| 溆浦县| 故城县| 昆山市| 扎赉特旗| 洪湖市| 白银市| 方正县| 罗城| 铜陵市|