詳解小程序云開(kāi)發(fā)的示例分析

小編給大家分享一下詳解小程序云開(kāi)發(fā)的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、電商網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā)。

背景

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

分析

云開(kāi)發(fā)為開(kāi)發(fā)者提供完整的原生云端支持和微信服務(wù)支持,弱化后端和運(yùn)維概念,無(wú)需搭建服務(wù)器,使用平臺(tái)提供的 API 進(jìn)行核心業(yè)務(wù)開(kāi)發(fā),即可實(shí)現(xiàn)快速上線和迭代,同時(shí)這一能力,同開(kāi)發(fā)者已經(jīng)使用的云服務(wù)相互兼容,并不互斥。

優(yōu)勢(shì)

  • 無(wú)需自建服務(wù)器,數(shù)據(jù)庫(kù),無(wú)需自建存儲(chǔ)和cdn

  • 數(shù)據(jù)庫(kù)模型很簡(jiǎn)單,就是一個(gè)json形式的對(duì)象格式

  • 調(diào)用服務(wù)端云函數(shù)自動(dòng)獲取openid,再也沒(méi)有繁瑣的授權(quán)登陸流程了,只要進(jìn)入小程序就是登陸狀態(tài),體驗(yàn)真的好

  • 開(kāi)發(fā)迅速,只需要前端就能搞定所有開(kāi)發(fā)工作

需要解決的問(wèn)題

數(shù)據(jù)庫(kù)切換問(wèn)題

使用過(guò)云開(kāi)發(fā)的人都發(fā)現(xiàn)云開(kāi)發(fā)切換數(shù)據(jù)庫(kù)環(huán)境是最頭疼的,如果手動(dòng)去切換容易搞錯(cuò),不小心在當(dāng)前環(huán)境修改了線上數(shù)據(jù)庫(kù)數(shù)據(jù)

直到官方出了這個(gè)函數(shù)問(wèn)題也就迎刃而解

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

我使用的是服務(wù)端云開(kāi)發(fā)功能,為什么要這樣判斷,因?yàn)樵陂_(kāi)發(fā)工具中ENV = 'local',所以這么判斷一下,保證開(kāi)發(fā)工具中使用的是測(cè)試環(huán)境數(shù)據(jù)庫(kù)

使用taro多端開(kāi)發(fā)框架,借助于webpack,還可以通過(guò)process.env.NODE_ENV值區(qū)分當(dāng)前代碼開(kāi)發(fā)環(huán)境

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

這樣可以保證開(kāi)發(fā)環(huán)境和線上環(huán)境可以使用對(duì)應(yīng)環(huán)境的數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)字段定義問(wèn)題

因?yàn)镴S是弱類型語(yǔ)言,不能像typescript那樣靜態(tài)定義變量類型,這樣添加到數(shù)據(jù)庫(kù)的字段數(shù)量和字段類型都無(wú)法控制

我不想用typescript,能不能實(shí)現(xiàn)這樣的功能呢,可以用superstruct庫(kù)來(lái)實(shí)現(xiàn)這個(gè)功能

  • superstruct git地址 點(diǎn)我查看>>

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

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

官方和他人教程的例子都是一個(gè)文件對(duì)應(yīng)一個(gè)云函數(shù),通過(guò)開(kāi)發(fā)體驗(yàn)我發(fā)現(xiàn)這樣做并不好,當(dāng)項(xiàng)目有多個(gè)表的時(shí)候,找個(gè)函數(shù)文件真的太難了
我們可以將一個(gè)表的增刪改查函數(shù)全部寫(xiě)入一個(gè)文件中

教程: 首先每個(gè)云函數(shù)文件中package.json引入superstruct

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

以下代碼是一個(gè)完整的云函數(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', //樓單元號(hào)
     doorNumber: 'string', //門(mén)號(hào)
     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)前只支持保存一個(gè)地址' };
   }
   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 先判斷手機(jī)號(hào)修改沒(méi),沒(méi)修改直接就改數(shù)據(jù),修改過(guò)判斷一下庫(kù)中有沒(méi)有這條數(shù)據(jù)
  async update(data) {
   //更新表的操作
  },
  //刪除指定id的shop
  async remove({ _id, _openid }) {
   //刪除表的操作
  },
  /**
   * 獲取商列表
   * @param {*} option {category 類別, pagenum 頁(yè)碼}
   */
  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)訪問(wè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ù)
   }
  });

圖片 視頻等文件

直接打開(kāi)云開(kāi)發(fā)控制臺(tái)選擇存儲(chǔ)直接上傳文件,復(fù)制url地址就可以放到代碼中使用了

看完了這篇文章,相信你對(duì)“詳解小程序云開(kāi)發(fā)的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站欄目:詳解小程序云開(kāi)發(fā)的示例分析
鏈接地址:http://muchs.cn/article20/jejhjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)App開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、移動(dòng)網(wǎng)站建設(shè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)