经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 微信小程序 » 查看文章
在微信小程序中使用LeanCloud(一)
来源:cnblogs  作者:wenlvpapa  时间:2018/10/22 16:17:34  对本文有异议

  之前学习了微信小程序前端,使用到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 的引用。在其他文件中使用时请将路径替换成对应的相对路径。

  1. //app.js
  2. const AV = require('./libs/av-weapp-min.js');

  在leanCloud里创建一个微信小程序应用(这里以蜗牛阅读为例子),然后在应用【存储】里创建一个表Class(这里以 'Books' 为例),也可以直接通过设置数据的代码后台直接生成Class。

  然后,初始化,在app.js 文件里app({})函数之前添加此代码。其中 APP_ID 和 APP_KEY 可以在此应用里的【设置】-【应用 key】里查看。

  1. //文件 app.js
  2. var APP_ID = 'xTM1XXfTJrTqRpbzcSI30HFj-gzGzoHsa';
    var APP_KEY = 'Pb3PLtbjqWRP5aXKHvGfD6kB';
  3. AV.init({
  4. appId: APP_ID,
  5. appKey: APP_KEY
  6. });

   接下里就可以实现数据存储了,是不是很轻松。它就像一个黑匣子,对前端开发人员来说,并不需要知道它是怎么实现增删查改的,只需要使用它的方法即可【数据存储传送门】。

 

$ 保存对象 $

  构建一个 AV.object 可以使用如下方法:

  1. // AV.Object.extend('className') 所需的参数 className 则表示对应的表名
  2. // 声明一个类型
  3. var Todo = AV.Object.extend('Books');

  如果Books这个Class没有创建,下面代码将会既实现创建操作又实现添加数据操作:

  1. // 声明类型
  2. var books= AV.Object.extend('Books');
  3. // 新建对象
  4. var book= new books();
  5. // 设置名称
  6. book.set('name','工作');
  7. // 设置优先级
  8. book.set('priority',1);
  9. book.save().then(function (todo) {
  10. console.log('objectId is ' + todo.id);
  11. }, function (error) {
  12. console.error(error);
  13. });

 

$ 获取对象 $

   每个被成功保存在云端的对象会有一个唯一的 Id 标识 id,因此获取对象的最基本的方法就是根据 id 来查询:

  1. var query = new AV.Query('Books');
  2. query.get('57328ca079bc44005c2472d0').then(function (todo) {
  3. // 成功获得实例
  4. // todo 就是 id 为 57328ca079bc44005c2472d0 的 Books 对象实例
  5. }, function (error) {
  6. // 异常处理
  7. });

  访问对象的属性:

  1. var query = new AV.Query('Books');
  2. query.get('558e20cbe4b060308e3eb36c').then(function (todo) {
  3. // 成功获得实例
  4. // todo 就是 id 为 558e20cbe4b060308e3eb36c 的 Books 对象实例
  5. var priority = todo.get('priority');
  6. var location = todo.get('location');
  7. var title = todo.get('title');
  8. var content = todo.get('content');
  9. // 获取三个默认属性 每个对象数据都有默认属性
  10. var objectId = todo.id;
  11. var updatedAt = todo.updatedAt;
  12. var createdAt = todo.createdAt;
  13. //Wed May 11 2016 09:36:32 GMT+0800 (CST)
  14. console.log(createdAt);
  15. }, function (error) {
  16. // 异常处理
  17. console.error(error);
  18. });

  如果需要一次性获取返回对象的所有属性(比如进行数据绑定)而非显式地调用 get(属性名),可以利用 AV.Object 实例的 toJSON() 方法(需要 leancloud-storage@^3.0.0 以上版本)来得到一个 plain object。

  1. var query = new AV.Query('Books');
  2. query.get('558e20cbe4b060308e3eb36c').then(function (todo) {
  3. console.log(todo.toJSON())
  4. // ==== console 中的结果 ====
  5. // content: "每周工程师会议,周一下午2点"
  6. // createdAt: "2017-03-08T11:25:07.804Z"
  7. // location: "会议室"
  8. // objectId: "558e20cbe4b060308e3eb36c"
  9. // priority: 1
  10. // title: "工程师周会"
  11. // updatedAt: "2017-03-08T11:25:07.804Z"
  12. }).catch(function (error) {
  13. // 异常处理
  14. console.error(error);
  15. });

 

 $ 数据更新 $

   LeanStorage 上的更新对象都是针对单个对象,云端会根据有没有 objectId 来决定是新增还是更新一个对象。更新操作是覆盖式的,云端会根据最后一次提交到服务器的有效请求来更新数据。

  假如 id 已知,则可以通过如下接口从本地构建一个 AV.Object 来更新这个对象:

  1. // 第一个参数是 className,第二个参数是 objectId
  2. var book= AV.Object.createWithoutData('Books', '5745557f71cfe40068c6abe0');
  3. // 修改属性
  4. book.set('content', '每周工程师会议,本周改为周三下午3点半。');
  5. // 保存到云端
  6. book.save();

  通过使用 保存选项 query 可以按照指定条件去更新对象——当条件满足时,执行更新;条件不满足时,不执行更新。

  引用它的例子: 用户的账务账户表 Account 有一个余额字段 balance,同时有多个请求要修改该字段值,为避免余额出现负值,只有满足 balance >= 当前请求的数值 这个条件才允许修改,否则提示「余额不足,操作失败!」。

  1. var Account = AV.Object.extend('Account');
  2. new AV.Query(Account).first().then(function(account) {
  3. var amount = -100;
  4. account.increment('balance', amount);
  5. return account.save(null, {
  6. query: new AV.Query(Account).greaterThanOrEqualTo('balance', -amount),
  7. fetchWhenSave: true,
  8. });
  9. }).then(function(account) {
  10. // 保存成功
  11. console.log('当前余额为:', account.get('balance'));
  12. }).catch(function(error) {
  13. if (error.code === 305) {
  14. console.log('余额不足,操作失败!');
  15. }
  16. });

 

$ 删除对象 $

  假如某一个 book 完成了,用户想要删除这个 book 对象,可以如下操作:

  1. var book= AV.Object.createWithoutData('Books', '57328ca079bc44005c2472d0');
  2. book.destroy().then(function (success) {
  3. // 删除成功
  4. }, function (error) {
  5. // 删除失败
  6. });

  为了减少网络交互的次数太多带来的时间浪费,你可以在一个请求中对多个对象进行创建、更新、删除、获取。接口都在 AV.Object 这个类下面:

  1. var objects = []; // 构建一个本地的 AV.Object 对象数组
  2.  
  3. // 批量创建(更新)
  4. AV.Object.saveAll(objects).then(function (objects) {
  5. // 成功
  6. }, function (error) {
  7. // 异常处理
  8. });
  9. // 批量删除
  10. AV.Object.destroyAll(objects).then(function () {
  11. // 成功
  12. }, function (error) {
  13. // 异常处理
  14. });
  15. // 批量获取
  16. AV.Object.fetchAll(objects).then(function (objects) {
  17. // 成功
  18. }, function (error) {
  19. // 异常处理
  20. });

  1. //查询一些对象,统一更新
  2. var query = new AV.Query('Todo');
  3. query.find().then(function (todos) {
  4. todos.forEach(function(todo) {
  5. todo.set('status', 1);
  6. });
  7. return AV.Object.saveAll(todos);
  8. }).then(function(todos) {
  9. // 更新成功
  10. }, function (error) {
  11. // 异常处理
  12. });

  以上是本次微信小程序学习中使用到的一些leanCloud数据库操作。希望对各位看官有帮助。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号