1. 程式人生 > >在微信小程序中使用LeanCloud(一)

在微信小程序中使用LeanCloud(一)

存儲 tar true script eal 字段 第一個 對象數組 例子

  之前學習了微信小程序前端,使用到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(一)