欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序云開發(fā) 搭建一個管理小程序

 更新時間:2019年05月17日 15:45:44   作者:yunsiyu  
這篇文章主要為大家詳細介紹了微信小程序云開發(fā),搭建一個管理小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下

概述 :

開發(fā)者可以使用云開發(fā)開發(fā)微信小程序、小游戲,無需搭建服務器,即可使用云端能力。

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

目前提供三大基礎能力支持:

  • 云函數(shù):在云端運行的代碼,微信私有協(xié)議天然鑒權,開發(fā)者只需編寫自身業(yè)務邏輯代碼
  • 數(shù)據(jù)庫:一個既可在小程序前端操作,也能在云函數(shù)中讀寫的 JSON 數(shù)據(jù)庫
  • 存儲:在小程序前端直接上傳/下載云端文件,在云開發(fā)控制臺可視化管理

創(chuàng)建項目:

新建項目選擇一個空目錄,填入 AppID(使用云開發(fā)能力必須填寫 AppID),勾選創(chuàng)建 “云開發(fā) QuickStart 項目”,點擊創(chuàng)建即可得到一個展示云開發(fā)基礎能力的示例小程序。

項目結構如下:

開通云服務:

點擊云開發(fā) , 打開云開發(fā)控制臺,云開發(fā)控制臺提供如下能力(云函數(shù)中對數(shù)據(jù)庫的操作等同于在控制臺直接操作數(shù)據(jù)庫)

  • 概覽:查看云開發(fā)基礎使用數(shù)據(jù)
  • 用戶管理:查看小程序用戶信息
  • 數(shù)據(jù)庫:管理數(shù)據(jù)庫,可查看、增加、更新、查找、刪除數(shù)據(jù)、管理索引、管理數(shù)據(jù)庫訪問權限等
  • 存儲管理:查看和管理存儲空間
  • 云函數(shù):查看云函數(shù)列表、配置、日志和監(jiān)控
  • 統(tǒng)計分析:查看云開發(fā)資源具體使用統(tǒng)計信息 

基礎方法(基本涵蓋小程序云開發(fā)常用的定義和方法):

小程序調(diào)用云函數(shù)示例:

// Callback 風格調(diào)用
wx.cloud.callFunction({
 // 要調(diào)用的云函數(shù)名稱
 name: 'add',
 // 傳遞給云函數(shù)的參數(shù)
 data: {
 x: 1,
 y: 2,
 },
 success: res => {
 // output: res.result === 3
 },
 fail: err => {
 // handle error
 },
 complete: () => {
 // ...
 }
})
 
// Promise 風格調(diào)用
wx.cloud.callFunction({
 // 要調(diào)用的云函數(shù)名稱
 name: 'add',
 // 傳遞給云函數(shù)的event參數(shù)
 data: {
 x: 1,
 y: 2,
 }
}).then(res => {
 // output: res.result === 3
}).catch(err => {
 // handle error
})

小程序調(diào)用數(shù)據(jù)庫示例:

// 1. 獲取數(shù)據(jù)庫引用
const db = wx.cloud.database()
// 2. 構造查詢語句
// collection 方法獲取一個集合的引用
// where 方法傳入一個對象,數(shù)據(jù)庫返回集合中字段等于指定值的 JSON 文檔。API 也支持高級的查詢條件(比如大于、小于、in 等),具體見文檔查看支持列表
// get 方法會觸發(fā)網(wǎng)絡請求,往數(shù)據(jù)庫取數(shù)據(jù)
db.collection('books').where({
publishInfo: {
country: 'United States'
}
}).get({
success: function(res) {
// 輸出 [{ "title": "The Catcher in the Rye", ... }]
console.log(res)
}
})

小程序存儲調(diào)用示例:

// 讓用戶選擇一張圖片
wx.chooseImage({
success: chooseResult => {
// 將圖片上傳至云存儲空間
wx.cloud.uploadFile({
// 指定上傳到的云路徑
cloudPath: 'my-photo.png',
// 指定要上傳的文件的小程序臨時文件路徑
filePath: chooseResult.tempFilePaths[0],
// 成功回調(diào)
success: res => {
console.log('上傳成功', res)
},
})
},
})

云函數(shù)的定義:

// index.js 是入口文件,云函數(shù)被調(diào)用時會執(zhí)行該文件導出的 main 方法
// event 包含了調(diào)用端(小程序端)調(diào)用該函數(shù)時傳過來的參數(shù),同時還包含了可以通過 getWXContext 方法獲取的用戶登錄態(tài) `openId` 和小程序 `appId` 信息
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {
const {userInfo, a, b} = event
const {OPENID, APPID} = cloud.getWXContext() // 這里獲取到的 openId 和 appId 是可信的
const sum = a + b
 
return {
OPENID,
APPID,
sum
}
}

云函數(shù)中操作數(shù)據(jù)庫

以下調(diào)用獲取默認環(huán)境的數(shù)據(jù)庫的引用:

const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()

假設有一個環(huán)境名為 test,用做測試環(huán)境,那么可以如下獲取測試環(huán)境數(shù)據(jù)庫:

const cloud = require('wx-server-sdk')
cloud.init()
const testDB = cloud.database({
env: 'test'
})

也可以通過 init 傳入默認環(huán)境的方式使得獲取數(shù)據(jù)庫時默認是默認環(huán)境數(shù)據(jù)庫:

const cloud = require('wx-server-sdk')
cloud.init({
env: 'test'
})
const testDB = cloud.database()

操作集合:

const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const todosCollection = db.collection('todos') // 獲取todos集合

云開發(fā)實踐:

(使用小程序云開發(fā)實現(xiàn)一個可以增刪改查的設備管理平臺)

1: 需求分析:

  • 設備管理現(xiàn)狀: 部門有大量安卓/蘋果測試機和測試硬件設備 , 當前管理現(xiàn)狀混亂 , 管理員使用紙質(zhì)表格和excel對每次的出借情況進行記錄 , 當有同事需要測試設備的時候 , 需要聯(lián)系管理員 , 管理員查閱表格 , 找到最后借用人進行協(xié)調(diào) , 并登記在冊
  • 管理痛點: 管理員需要通過翻閱借用記錄表去了解設備現(xiàn)狀 , 并協(xié)調(diào)資源 , 增加了工作量 , 普通員工無法知道設備出借現(xiàn)狀 , 獲取設備環(huán)節(jié)復雜;
  • 考勤管理現(xiàn)狀: 管理員通過excel表格匯總考勤情況 , 并逐月發(fā)送到員工郵箱 , 員工需要下載csv文件去查看考勤
  • 考勤管理痛點: 對于員工 , 通過查看excel十分不便
  • 需求總結: 普通員工通過查看設備現(xiàn)狀 , 找到可以狀態(tài)的設備 , 并匯報管理員 , 管理員通過小程序切換設備狀態(tài) , 綁定使用人 ; 管理員逐月導入考勤數(shù)據(jù) , 員工可通過小程序查看個人考勤情況; 

2: 項目構建

  • ui庫使用iview weapp
  • 小程序端(前端)對數(shù)據(jù)庫的操作權限是嚴格按照控制臺中配置的權限 , 云函數(shù)則擁有所有權限(云函數(shù)中對數(shù)據(jù)庫的操作等同于在云開發(fā)控制臺中進行數(shù)據(jù)庫操作),所以本項目中所有的關于數(shù)據(jù)庫的操作都將在云函數(shù)中處理 , 小程序端只作為視圖層 , 并對無權限的界面和操作進行視覺隔離

3: 建立集合

通過云函數(shù)控制臺建立需要的集合 , 并將excel/json文件導入到對應的集合, 也可以直接手動建立

4: 核心功能的實現(xiàn)(以云函數(shù)操作數(shù)據(jù)庫為主)

小程序端>app.js

初始化云函數(shù) , 獲取已授權用戶信息 , 定義需要的全局數(shù)據(jù)

//app.js
App({
 onLaunch: function () {
 const _this = this
 // 初始化云函數(shù)
 if (!wx.cloud) {
 console.error('請使用 2.2.3 或以上的基礎庫以使用云能力')
 } else {
 wx.cloud.init({
 traceUser: true,
 })
 }
 // 獲取用戶信息(針對已經(jīng)授權過的用戶,直接獲取用戶信息)
 wx.getSetting({
 success: res => {
 if (res.authSetting['scope.userInfo']) {
  // 已經(jīng)授權,可以直接調(diào)用 getUserInfo 獲取頭像昵稱,不會彈框
  wx.getUserInfo({
  success: res => {
  _this.globalData.avatarUrl = res.userInfo.avatarUrl
  _this.globalData.userInfo = res.userInfo
  if (_this.userInfoCallback) {
  _this.userInfoCallback()
  }
  }
  })
 }
 }
 })
 this.globalData = {
 userInfo: {}, // 微信用戶信息
 userRole: '', // 當前用戶角色
 registerUser: {}, // 微信用戶綁定的用戶信息
 userindex: '', // 編輯設備和添加設備頁面,index索引選擇的值name
 userindexId: '',// 編輯設備和添加設備頁面,index索引選擇的值id
 currentQuerys: {
 type: ['iphone', 'android', 'ble'],
 user: []
 } // 設備管理篩選框篩選的結果
 }
 }
})

云函數(shù) > login (云函數(shù)條件查詢云數(shù)據(jù)庫)

以小程序open_id為查詢條件 , 在云函數(shù)user集合中查找綁定該open_id的數(shù)據(jù) , 為空表示該微信賬號未綁定用戶名

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
 const wxContext = cloud.getWXContext()
 // 調(diào)用數(shù)據(jù)庫獲取所有設備列表
 const db = cloud.database() // 獲取數(shù)據(jù)庫
 const _ = db.command // 獲取查詢指令
 const usersCollection = db.collection('users') // 獲取users集合
 const user = (await usersCollection.where({
 open_id: wxContext.OPENID // 根據(jù)唯一open_id在user集合中查找已綁定的用戶
 }).get())
 return {
 event,
 data: user,
 openid: wxContext.OPENID,
 appid: wxContext.APPID,
 unionid: wxContext.UNIONID,
 }
}

云函數(shù) > register (云函數(shù)修改數(shù)據(jù)庫數(shù)據(jù))

對于未綁定的微信號 , 需要將用戶選中的用戶名與當前微信open_id綁定 , 完成注冊

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
 const wxContext = cloud.getWXContext()
 // 調(diào)用數(shù)據(jù)庫獲取所有設備列表
 const db = cloud.database() // 獲取數(shù)據(jù)庫
 const _ = db.command // 獲取查詢指令
 const usersCollection = db.collection('users') // 獲取users集合
 // 查詢條件
 let query = _.eq(event.id)
 // 
 try {
 await usersCollection.doc(event.id).update({
 // data 傳入需要局部更新的數(shù)據(jù)
 data: {
 open_id: wxContext.OPENID
 }
 })
 } catch (e) {
 console.log(e)
 }
 
 return {
 event,
 openid: wxContext.OPENID,
 appid: wxContext.APPID,
 unionid: wxContext.UNIONID,
 }
}

云函數(shù) > getEquipmentList (云函數(shù)查詢?nèi)繑?shù)據(jù) , 云函數(shù)按條件查詢數(shù)據(jù)庫)

獲取設備數(shù)據(jù)的時候存在多種情況

  • 獲取全部數(shù)據(jù): 由于獲取數(shù)據(jù)庫有100條上限的限制 , 需要進行特殊處理
  • 按條件查詢數(shù)據(jù) : 需要提前拼接好查詢語句
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
 const wxContext = cloud.getWXContext()
 // 調(diào)用數(shù)據(jù)庫獲取所有設備列表
 const db = cloud.database() // 獲取數(shù)據(jù)庫
 const _ = db.command // 獲取查詢指令
 const equipmentCollection = db.collection('equipment') // 獲取equipment集合
 // 取所有集合中符合條件的數(shù)據(jù)(因為有默認 limit 100 條的限制,需要做特殊操作)
 const MAX_LIMIT = 100
 // 先取出集合記錄總數(shù)
 const countResult = await equipmentCollection.count()
 const total = countResult.total
 // 計算需分幾次取
 const batchTimes = Math.ceil(total / 100)
 // 承載所有讀操作的 promise 的數(shù)組
 const tasks = []
 let query = {}
 // 封裝設備類型查詢條件(直接通過reduce直接拼接方法)
 query.eq_type = event.queryList['type'].reduce((acc, cur) => {
 if (!acc) {
 return _.eq(cur)
 } else {
 return acc.or(_.eq(cur))
 }
 }, null)
 // 用戶名查詢條件
 if (event.queryList['user'].length>0) {
 query.eq_user = event.queryList['user'][0]
 }
 for (let i = 0; i < batchTimes; i++) {
 const promise = equipmentCollection.where(query).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
 tasks.push(promise)
 }
 // 等待所有數(shù)據(jù)讀取完成
 const equipmentList = (await Promise.all(tasks)).reduce((acc, cur) => ({
 data: acc.data.concat(cur.data),
 errMsg: acc.errMsg,
 }))
 
 return {
 event,
 data: equipmentList,
 openid: wxContext.OPENID,
 appid: wxContext.APPID,
 unionid: wxContext.UNIONID,
 }
}

 云函數(shù) > removeEquipement (云函數(shù)刪除集合數(shù)據(jù))

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
 
cloud.init()
 
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
 const wxContext = cloud.getWXContext()
 // 調(diào)用數(shù)據(jù)庫獲取所有設備列表
 const db = cloud.database() // 獲取數(shù)據(jù)庫
 const _ = db.command // 獲取查詢指令
 const equipmentCollection = db.collection('equipment') // 獲取equipment集合
 
 try{
 await equipmentCollection.doc(event.id).remove()
 } catch(e){
 console.error(e)
 }
 
 return {
 event,
 openid: wxContext.OPENID,
 appid: wxContext.APPID,
 unionid: wxContext.UNIONID,
 }
}

項目截圖:

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

相關文章

  • JS實現(xiàn)圖片元素轉BASE64編碼的簡單示例

    JS實現(xiàn)圖片元素轉BASE64編碼的簡單示例

    在Web開發(fā)中,我們經(jīng)常需要將圖片轉換為Base64格式,以便在不依賴外部資源的情況下直接在HTML中使用,在這篇文章中,我將向您展示如何使用JavaScript將圖片元素轉BASE64編碼,需要的朋友可以參考下
    2023-12-12
  • js實現(xiàn)html滑動圖片拼圖驗證

    js實現(xiàn)html滑動圖片拼圖驗證

    這篇文章主要為大家詳細介紹了js實現(xiàn)html滑動圖片拼圖驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • HTML DOM的nodeType值介紹

    HTML DOM的nodeType值介紹

    將HTML DOM中幾個容易常用的屬性做下記錄,需要的朋友可以參考下。
    2011-03-03
  • JS實現(xiàn)選中當前菜單后高亮顯示的導航條效果

    JS實現(xiàn)選中當前菜單后高亮顯示的導航條效果

    這篇文章主要介紹了JS實現(xiàn)選中當前菜單后高亮顯示的導航條效果,涉及JavaScript針對頁面元素的遍歷及樣式動態(tài)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 跟我學習javascript的垃圾回收機制與內(nèi)存管理

    跟我學習javascript的垃圾回收機制與內(nèi)存管理

    跟我學習javascript的垃圾回收機制與內(nèi)存管理,感興趣的小伙伴們可以參考一下
    2015-11-11
  • tab欄切換原理

    tab欄切換原理

    本文主要介紹了tab欄切換的原理以及實現(xiàn)方法代碼。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • javascript 可以拖動的DIV(二)

    javascript 可以拖動的DIV(二)

    關于這個實現(xiàn)div拖動的js函數(shù),實際上也是某位前輩公布于網(wǎng)上,這兒只是摘抄注解一下。
    2009-06-06
  • javascript隨機將第一個dom中的圖片添加到第二個div中示例

    javascript隨機將第一個dom中的圖片添加到第二個div中示例

    此代碼的是一個簡單的例子,將第一個div中的五張圖片中,提取隨機兩張顯示到第二個div中,具體實現(xiàn)如下,感興趣的朋友可以參考下
    2013-10-10
  • 詳解JavaScript中Object的重要屬性

    詳解JavaScript中Object的重要屬性

    JavaScript 中的 Object 是一種非常靈活且強大的數(shù)據(jù)類型,它允許我們創(chuàng)建和操作鍵值對,在本文中,我們將深入探討 Object 的一些重要屬性,以便更好地理解和利用這個關鍵的數(shù)據(jù)結構,需要的朋友可以參考下
    2023-11-11
  • 基于JavaScript怎么實現(xiàn)讓歌詞滾動播放

    基于JavaScript怎么實現(xiàn)讓歌詞滾動播放

    各種音樂播放器上都有一個自動滾動播放歌詞的功能,當前滾動到的歌詞會高亮居中顯示,即使歌詞被換行也能正常居中,那么這個功能基于JavaScript怎么實現(xiàn)讓歌詞滾動播放呢?感興趣的朋友一起看看吧
    2015-11-11

最新評論