在微信小程序中使用LeanCloud(一)
之前學習了微信小程序前端,使用到LeanCloud線上數據庫 【傳送門】。作為一個前端開發人員,了解後端及數據庫是學習工作的需要。
LeanCloud直接登錄,未註冊直接創建賬戶。它是一款免費的線上數據庫(開發版免費)。適用於一些想自己寫微信小程序前端但不太會後端的開發者學習用。本篇文章涉及數據存儲服務(增刪查改)。
首先,下載一個JavaScript-sdk :av-weapp-min.js【下載鏈接】,它是在微信小程序中使用此數據庫的關鍵文件。下載之後,保存至項目路徑,這裏以‘/libs/av-weapp-min.js’為例。在 app.js
中app({})函數之前使用 const AV = require(‘./libs/av-weapp-min.js‘);
AV
的引用。在其他文件中使用時請將路徑替換成對應的相對路徑。
//app.js const AV = require(‘./libs/av-weapp-min.js‘);
在leanCloud裏創建一個微信小程序應用(這裏以蝸牛閱讀為例子),然後在應用【存儲】裏創建一個表Class(這裏以 ‘Books‘ 為例),也可以直接通過設置數據的代碼後臺直接生成Class。
然後,初始化,在app.js 文件裏app({})函數之前添加此代碼。其中 APP_ID 和 APP_KEY 可以在此應用裏的【設置】-【應用 key】裏查看。
//文件 app.js var APP_ID = ‘xTM1XXfTJrTqRpbzcSI30HFj-gzGzoHsa‘;var APP_KEY = ‘Pb3PLtbjqWRP5aXKHvGfD6kB‘; AV.init({ appId: APP_ID, appKey: APP_KEY });
接下裏就可以實現數據存儲了,是不是很輕松。它就像一個黑匣子,對前端開發人員來說,並不需要知道它是怎麽實現增刪查改的,只需要使用它的方法即可【數據存儲傳送門】。
$ 保存對象 $
構建一個 AV.object 可以使用如下方法:
// AV.Object.extend(‘className‘) 所需的參數 className 則表示對應的表名 // 聲明一個類型 var Todo = AV.Object.extend(‘Books‘);
如果Books這個Class沒有創建,下面代碼將會既實現創建操作又實現添加數據操作:
// 聲明類型 var books= AV.Object.extend(‘Books‘); // 新建對象 var book= new books(); // 設置名稱 book.set(‘name‘,‘工作‘); // 設置優先級 book.set(‘priority‘,1); book.save().then(function (todo) { console.log(‘objectId is ‘ + todo.id); }, function (error) { console.error(error); });
$ 獲取對象 $
每個被成功保存在雲端的對象會有一個唯一的 Id 標識 id
,因此獲取對象的最基本的方法就是根據 id
來查詢:
var query = new AV.Query(‘Books‘); query.get(‘57328ca079bc44005c2472d0‘).then(function (todo) { // 成功獲得實例 // todo 就是 id 為 57328ca079bc44005c2472d0 的 Books 對象實例 }, function (error) { // 異常處理 });
訪問對象的屬性:
var query = new AV.Query(‘Books‘); query.get(‘558e20cbe4b060308e3eb36c‘).then(function (todo) { // 成功獲得實例 // todo 就是 id 為 558e20cbe4b060308e3eb36c 的 Books 對象實例 var priority = todo.get(‘priority‘); var location = todo.get(‘location‘); var title = todo.get(‘title‘); var content = todo.get(‘content‘); // 獲取三個默認屬性 每個對象數據都有默認屬性 var objectId = todo.id; var updatedAt = todo.updatedAt; var createdAt = todo.createdAt; //Wed May 11 2016 09:36:32 GMT+0800 (CST) console.log(createdAt); }, function (error) { // 異常處理 console.error(error); });
如果需要一次性獲取返回對象的所有屬性(比如進行數據綁定)而非顯式地調用 get(屬性名)
,可以利用 AV.Object 實例的 toJSON()
方法(需要 leancloud-storage@^3.0.0 以上版本)來得到一個 plain object。
var query = new AV.Query(‘Books‘); query.get(‘558e20cbe4b060308e3eb36c‘).then(function (todo) { console.log(todo.toJSON()) // ==== console 中的結果 ==== // content: "每周工程師會議,周一下午2點" // createdAt: "2017-03-08T11:25:07.804Z" // location: "會議室" // objectId: "558e20cbe4b060308e3eb36c" // priority: 1 // title: "工程師周會" // updatedAt: "2017-03-08T11:25:07.804Z" }).catch(function (error) { // 異常處理 console.error(error); });
$ 數據更新 $
LeanStorage 上的更新對象都是針對單個對象,雲端會根據有沒有 objectId 來決定是新增還是更新一個對象。更新操作是覆蓋式的,雲端會根據最後一次提交到服務器的有效請求來更新數據。
假如 id
已知,則可以通過如下接口從本地構建一個 AV.Object
來更新這個對象:
// 第一個參數是 className,第二個參數是 objectId var book= AV.Object.createWithoutData(‘Books‘, ‘5745557f71cfe40068c6abe0‘); // 修改屬性 book.set(‘content‘, ‘每周工程師會議,本周改為周三下午3點半。‘); // 保存到雲端 book.save();
通過使用 保存選項 query
可以按照指定條件去更新對象——當條件滿足時,執行更新;條件不滿足時,不執行更新。
引用它的例子: 用戶的賬務賬戶表 Account
有一個余額字段 balance
,同時有多個請求要修改該字段值,為避免余額出現負值,只有滿足 balance >= 當前請求的數值 這個條件才允許修改,否則提示「余額不足,操作失敗!」。
var Account = AV.Object.extend(‘Account‘); new AV.Query(Account).first().then(function(account) { var amount = -100; account.increment(‘balance‘, amount); return account.save(null, { query: new AV.Query(Account).greaterThanOrEqualTo(‘balance‘, -amount), fetchWhenSave: true, }); }).then(function(account) { // 保存成功 console.log(‘當前余額為:‘, account.get(‘balance‘)); }).catch(function(error) { if (error.code === 305) { console.log(‘余額不足,操作失敗!‘); } });
$ 刪除對象 $
假如某一個 book 完成了,用戶想要刪除這個 book 對象,可以如下操作:
var book= AV.Object.createWithoutData(‘Books‘, ‘57328ca079bc44005c2472d0‘); book.destroy().then(function (success) { // 刪除成功 }, function (error) { // 刪除失敗 });
為了減少網絡交互的次數太多帶來的時間浪費,你可以在一個請求中對多個對象進行創建、更新、刪除、獲取。接口都在 AV.Object
這個類下面:
var objects = []; // 構建一個本地的 AV.Object 對象數組 // 批量創建(更新) AV.Object.saveAll(objects).then(function (objects) { // 成功 }, function (error) { // 異常處理 }); // 批量刪除 AV.Object.destroyAll(objects).then(function () { // 成功 }, function (error) { // 異常處理 }); // 批量獲取 AV.Object.fetchAll(objects).then(function (objects) { // 成功 }, function (error) { // 異常處理 });
//查詢一些對象,統一更新 var query = new AV.Query(‘Todo‘); query.find().then(function (todos) { todos.forEach(function(todo) { todo.set(‘status‘, 1); }); return AV.Object.saveAll(todos); }).then(function(todos) { // 更新成功 }, function (error) { // 異常處理 });
以上是本次微信小程序學習中使用到的一些leanCloud數據庫操作。希望對各位看官有幫助。
在微信小程序中使用LeanCloud(一)