之前学习了微信小程序前端,使用到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(一)的更多相关文章

  1. 网页或微信小程序中使元素占满整个屏幕高度

    在项目中经常要用到一个容器元素占满屏幕高度和宽度,然后再在这个容器元素里放置其他元素. 宽度很简单就是width:100% 但是高度呢,我们知道的是height:100%必须是在父元素的高度给定了的情 ...

  2. 在微信小程序中使用富文本转化插件wxParse

    在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个 ...

  3. 微信小程序中发送模版消息注意事项

    在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...

  4. 微信小程序中placeholder的样式

    通常,现代浏览器大多支持::placeholder选择器,用于设置placeholder的样式,但是在微信小程序中并不支持这种方式,而是提供了一个专门的属性(placeholder-class)来处理 ...

  5. 微信小程序中转义字符的处理

    在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理 ...

  6. 微信小程序中用户登录和登录态维护

    提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情.像微信这样的一个社交平台,如果做一个小程序应用,我们可能很少会去做一个完全脱离和舍弃连接用户信息的纯工具软件. 让用户 ...

  7. 微信小程序中的组件使用1

    不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...

  8. 微信小程序中如何使用WebSocket实现长连接(含完整源码)

    本文由腾讯云技术团队原创,感谢作者的分享. 1.前言   微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架.组件以及 API,在这个平台上面的想象空间很大.腾讯云研究了一番之后,发现 ...

  9. 全栈开发工程师微信小程序-中(下)

    全栈开发工程师微信小程序-中(下) 微信小程序视图层 wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元. // 绑定数据 index.wxml <view> ...

随机推荐

  1. Spring Boot 1.5升级2.1 主要问题汇总

    我们目前工作的系统是基于Spring Boot 1.5.19.RELEASE.Spring Cloud Edgware.SR3开发的,因为一个新项目开发过程的体验,所以在考虑升级到Spring Boo ...

  2. 在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发

    在.net core开发过程中,使用最多的就是注入方法.但是在.net core使用PetaPoco时,PetaPoco还不支持进行注入方式进行处理一些问题. 今天对PetaPoco进行了一些扩展,可 ...

  3. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  4. Go语言如何判断一个chan被关闭

    当一个chanel被关闭后,再取出不会阻塞,而是返回零值 package main import "fmt" func main() { c := make(chan int, 5 ...

  5. Go Web:处理请求

    处理请求 Request和Response http Requset和Response的内容包括以下几项: Request or response line Zero or more headers ...

  6. HTTP状态码分类

    前言: 我们经常使用浏览器发出http请求,那么对于请求返回的状态,对于开发人员来讲,我们必须要明白其所代表的含义,如: 常见状态吗:400(请求无效),401(需要权限),500(服务器错误), 今 ...

  7. oracle 查询表中重复数据

    select * from tablename where id in (select id from tablename group by id having count(id) > 1)

  8. ASP.NET MVC 学习笔记-2.Razor语法

    1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“:”结尾.代码块中定义的变量可能会被同一个域中的其他块使用. ...

  9. win10下安装PHP_CodeSniffer 检查编码规范

    PHP CodeSniffer是PEAR中的一个用PHP5写的一个PHP的代码风格检测器,它根据预先设定好的PHP编码风格和规则,去检查应用中的代码风格情况是否有违反一组预先设置好的编码标准,内置了Z ...

  10. sublime text 安装nodejs开发插件

    系统:windows10nodejs版本:v6.1.14 请先配置好环境变量,这里就不说啦. 下载并设置nodejs插件 下载地址为https://github.com/tanepiper/Subli ...