小程序模板網(wǎng)

小程序云開(kāi)發(fā)初體驗(yàn)

發(fā)布時(shí)間:2018-11-15 17:11 所屬欄目:小程序開(kāi)發(fā)教程

 

創(chuàng)建云開(kāi)發(fā)項(xiàng)目時(shí),據(jù)官方描述,在微信開(kāi)發(fā)工具里,有一個(gè)QuickStart選項(xiàng),但我發(fā)現(xiàn)并沒(méi)有,可能是開(kāi)發(fā)工具版本或其他原因。

給數(shù)據(jù)庫(kù)添加數(shù)據(jù)

我在貓眼電影拷貝了部分?jǐn)?shù)據(jù),準(zhǔn)備倒入小程序云開(kāi)發(fā)的數(shù)據(jù)庫(kù)

 

 

可以看到,在控制臺(tái),可以自行添加數(shù)據(jù),也可以直接倒入一個(gè)json文件。我這里選擇調(diào)用它的API去倒入貓眼json數(shù)據(jù)

首先我創(chuàng)建了一個(gè)名為movies的集合,緊接著調(diào)用初始化的方法

app.js

...
onLaunch: function () {
    wx.cloud.init()
}
...
復(fù)制代碼

要操作數(shù)據(jù)庫(kù),需要先獲取到數(shù)據(jù)庫(kù)引用, 同時(shí),獲取到我剛創(chuàng)建的movies集合的引用, 由于在其他頁(yè)面也需要調(diào)用,我這里把它們都掛到app的屬性上

const app = getApp()
...
app.$db = wx.cloud.database()
app.$collect_movies = app.$db.collection('movies')
...
復(fù)制代碼
最后, 調(diào)用添加的方法

data.subjects.forEach(o => {
  app.$collect_movies.add({
    data: o
  })
})
復(fù)制代碼
現(xiàn)在云開(kāi)發(fā)控制臺(tái)數(shù)據(jù)庫(kù)里已經(jīng)有添加的數(shù)據(jù)了

顯示所有電影
app.$collect_movies.where({
  _openid: 'ofgUd0Rb4w8E7Af40N46ExxozS5g'
}).get({
  success: function (res) {
    console.log('res', res)
    that.setData({
      movies: res.data
    })
  }
})
復(fù)制代碼
根據(jù)ID查詢指定電影
app.$collect_movies.doc('W8Wf4t2AWotkhlzK').get({
    success: function (res) {
      console.log('res',res)
      that.setData({
        movie: res.data
      })
    }
})
復(fù)制代碼
查詢9分以上的電影
const _ = app.$db.command
app.$collect_movies.where({
    sc: _.gte(9)
}).get({
    success: function (res) {
      wx.hideLoading()
      that.setData({
        movies: res.data
      })
    }
})
獲取9分以上或0分的電影
const _ = app.$db.command
app.$collect_movies.where({
    sc: _.eq(0).or(_.gte(9))
}).get({
    success: function (res) {
      wx.hideLoading()
      that.setData({
        movies: res.data
      })
    }
})
復(fù)制代碼
修改主演名
# 確認(rèn)修改
const that = this
app.$collect_movies.doc(this.currentMovieId).update({
  data: {
    star: this.data.actor
  },
  success: function (res) {
    that.initUpdateData()
  }
})
復(fù)制代碼
刪除一部電影
# 確定刪除
delAction(e) {
    const that = this
    const id = e.currentTarget.dataset.id
    app.$collect_movies.doc(id).remove({
      success: function (res) {
        that.initUpdateData()
      }
    })
}
復(fù)制代碼

文件管理

上傳圖片到云存儲(chǔ)

試著把手機(jī)相冊(cè)的圖片上傳到小程序云存儲(chǔ)中,可以在小程序端直接使用提供的api

wx.cloud.uploadFile({
  cloudPath: 'example.png', // 上傳至云端的路徑
  filePath: '', // 小程序臨時(shí)文件路徑
  success: res => {
    // 返回文件 ID
    console.log(res.fileID)
  },
  fail: console.error
})
復(fù)制代碼
如果單純從代碼量來(lái)看,比上傳到騰訊自家騰訊云還簡(jiǎn)單,當(dāng)然比上傳到像阿里云、七牛云這樣的平臺(tái)操作更簡(jiǎn)單。

上傳成功之后,返回的不是圖片url, 而是文件id。如果要顯示圖片或者播放視頻,這個(gè)文件id,小程序的組件image/video也能識(shí)別

 <image class="movie" mode="widthFix" src="{{ fileId }}" wx:if="{{ fileId }}"> </image>
復(fù)制代碼
upload() {
    const that = this
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success(res) {
        const tempFilePaths = res.tempFilePaths
        console.log(tempFilePaths[0])
        wx.cloud.uploadFile({
          cloudPath: 'test/2.png', // 上傳至云端的路徑
          filePath: tempFilePaths[0], // 小程序臨時(shí)文件路徑
          success: res => {
            // 返回文件 ID
            console.log(res.fileID)
            that.setData({
              fileId: res.fileID
            })
          },
          fail: console.error
        })
      }
    })
}


 

根據(jù)文件id下載文件
downloadFile() {
  wx.cloud.downloadFile({
  fileID: 'cloud://ii-1853ca.6969-ii-1853ca/test/2.png',
  success: res => {
    // 返回臨時(shí)文件路徑
    console.log('tempFilePath', res)
    // cloud://ii-1853ca.6969-ii-1853ca/test/2.png
    this.setData({
      downloadFileResult: res
    })
  },
  fail: err => {
    // handle error
  }
})
復(fù)制代碼

根據(jù)文件id換取臨時(shí)網(wǎng)絡(luò)鏈接

可以根據(jù)文件 ID 換取臨時(shí)文件網(wǎng)絡(luò)鏈接,文件鏈接有有效期為兩個(gè)小時(shí)

const that = this
wx.cloud.getTempFileURL({
    fileList: [this.data.fileId],
    success: res => {
      // https://6969-ii-1853ca-1253918415.tcb.qcloud.la/test/2.png
      that.setData({
        fileList: res.fileList
      })
    },
    fail: err => {
      // handle error
    }
})
復(fù)制代碼

云函數(shù)

怎么玩?

云函數(shù)是運(yùn)行在Node.js環(huán)境下的

首先在小程序項(xiàng)目根目錄找到配置文件project.config.json文件,加上一個(gè)配置, 指定本地已存在的目錄作為云函數(shù)的本地根目錄

  "cloudfunctionRoot": "./functions/",
復(fù)制代碼

指定之后神奇的一幕就是圖標(biāo)會(huì)變成 “云目錄圖標(biāo)”

子目錄都是我通過(guò)右鍵菜單創(chuàng)建一個(gè)新的云函數(shù),其中文件名就是云函數(shù)名

每創(chuàng)建一個(gè)云函數(shù),都會(huì)出現(xiàn)彈窗,詢問(wèn)你是否有node環(huán)境,確定后會(huì)自動(dòng)打開(kāi)終端,安裝依賴, 所以每一個(gè)云函數(shù)里面都是這樣的:

在index.js中, 默認(rèn)是這樣的

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {

}
復(fù)制代碼
創(chuàng)建一個(gè)相加的云函數(shù)
plus/

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)
// context 對(duì)象包含了此處調(diào)用的調(diào)用信息和運(yùn)行狀態(tài)
// event 指的是觸發(fā)云函數(shù)的事件
exports.main = async (event, context) => {
  return {
    sum: event.a + event.b
  }
}
復(fù)制代碼
在小程序端調(diào)用plus云函數(shù), 參數(shù)名一眼就看明白,不用解釋

wx.cloud.callFunction({
  name: 'plus',
  data: {
    a: 1,
    b: 2,
  },
  success: function (res) {
    console.log('plus', res.result) // 3
  },
  fail: console.error
})
復(fù)制代碼

調(diào)用后報(bào)錯(cuò),是因?yàn)闆](méi)有把創(chuàng)建的云函數(shù)上傳部署到云端, 如何部署?看下圖

部署成功之后,我們來(lái)到云控制臺(tái), 發(fā)現(xiàn)云函數(shù)已經(jīng)在上面

 

 

回到小程序,再次調(diào)用云函數(shù),發(fā)現(xiàn)已經(jīng)可以了, 拿到了預(yù)期的值3

獲取小程序用戶信息

云開(kāi)發(fā)的云函數(shù)的獨(dú)特優(yōu)勢(shì)在于與微信登錄鑒權(quán)的無(wú)縫整合。當(dāng)小程序端調(diào)用云函數(shù)時(shí),云函數(shù)的傳入?yún)?shù)中會(huì)被注入小程序端用戶的 openid,開(kāi)發(fā)者無(wú)需校驗(yàn) openid 的正確性,因?yàn)槲⑿乓呀?jīng)完成了這部分鑒權(quán),開(kāi)發(fā)者可以直接使用該 openid。與 openid 一起同時(shí)注入云函數(shù)的還有小程序的 appid

定義云函數(shù)

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  return event.userInfo
}
復(fù)制代碼
調(diào)用云函數(shù)

wx.cloud.callFunction({
    name: 'userInfo',
    success: function (res) {
      console.log('userInfo', res.result)
        /*
          {
            appId:"wx8dae61dd0ef5c510",
            openId:"ofgUd0Rb4w8E7Af40N46ExxozS5g"
           }
        */
    },
    fail: console.error
})
復(fù)制代碼
異步云函數(shù)
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(event.a + event.b)
    }, 3000)
  })
}
復(fù)制代碼

在云函數(shù)中我們可以引入第三方依賴來(lái)幫助我們更快的開(kāi)發(fā)。云函數(shù)的運(yùn)行環(huán)境是 Node.js,因此我們可以使用 npm 安裝第三方依賴。比如除了使用 Node.js 提供的原生 http 接口在云函數(shù)中發(fā)起網(wǎng)絡(luò)請(qǐng)求,我們還可以使用一個(gè)流行的 Node.js 網(wǎng)絡(luò)請(qǐng)求庫(kù) request 來(lái)更便捷的發(fā)起網(wǎng)絡(luò)請(qǐng)求。

注意,現(xiàn)在上傳云函數(shù)時(shí)不會(huì)在云端自動(dòng)安裝依賴,需要開(kāi)發(fā)者在本地安裝好依賴后一起打包上傳。

云函數(shù)操作數(shù)據(jù)庫(kù)
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database()

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  // 獲取電影集合數(shù)據(jù)
  return db.collection('movies').get()
}
復(fù)制代碼
云函數(shù)調(diào)用其他云函數(shù)
定義云函數(shù)

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  return await cloud.callFunction({
    name: 'plus',
    data: {
      a: 1,
      b: 2,
    }
  })
}
復(fù)制代碼

調(diào)用云函數(shù)

wx.cloud.callFunction({
  name: 'cloudFuncCallColundFunc',
  complete: res => {
    console.log('cloudFuncCallColundFunc', res)
  },
})
復(fù)制代碼
云函數(shù)日志、測(cè)試

可以看到調(diào)用的云函數(shù)的調(diào)用日志

可以直接測(cè)試編寫好的云函數(shù),傳入?yún)?shù), 點(diǎn)擊運(yùn)行調(diào)試按鈕即可

云開(kāi)發(fā)初體驗(yàn)總結(jié)

云開(kāi)發(fā)大概在8月份公測(cè),9月份發(fā)布出來(lái)的,現(xiàn)在已經(jīng)快11月份了,據(jù)官方描述,有很多開(kāi)發(fā)人員參與進(jìn)去,是他們沒(méi)有預(yù)料到的, 同時(shí)也被提出了很多吐槽點(diǎn),小程序的云開(kāi)發(fā)也可以說(shuō)是在試水階段,有不少坑,后面肯定會(huì)越來(lái)越完善。 逐漸成熟,會(huì)是一個(gè)非常不錯(cuò)的解決方案, 特別是針對(duì)那些初創(chuàng)公司。

 


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開(kāi)源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.u-renovate.com/wxmini/doc/course/24959.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×