在微信小程序中使用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(一)的更多相关文章
- 网页或微信小程序中使元素占满整个屏幕高度
在项目中经常要用到一个容器元素占满屏幕高度和宽度,然后再在这个容器元素里放置其他元素. 宽度很简单就是width:100% 但是高度呢,我们知道的是height:100%必须是在父元素的高度给定了的情 ...
- 在微信小程序中使用富文本转化插件wxParse
在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个 ...
- 微信小程序中发送模版消息注意事项
在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...
- 微信小程序中placeholder的样式
通常,现代浏览器大多支持::placeholder选择器,用于设置placeholder的样式,但是在微信小程序中并不支持这种方式,而是提供了一个专门的属性(placeholder-class)来处理 ...
- 微信小程序中转义字符的处理
在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理 ...
- 微信小程序中用户登录和登录态维护
提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情.像微信这样的一个社交平台,如果做一个小程序应用,我们可能很少会去做一个完全脱离和舍弃连接用户信息的纯工具软件. 让用户 ...
- 微信小程序中的组件使用1
不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...
- 微信小程序中如何使用WebSocket实现长连接(含完整源码)
本文由腾讯云技术团队原创,感谢作者的分享. 1.前言 微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架.组件以及 API,在这个平台上面的想象空间很大.腾讯云研究了一番之后,发现 ...
- 全栈开发工程师微信小程序-中(下)
全栈开发工程师微信小程序-中(下) 微信小程序视图层 wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元. // 绑定数据 index.wxml <view> ...
随机推荐
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 使用 Mutex 实现进程间同步
我们知道 Mutex 互斥量是可以用在线程间同步的,线程之间共享进程的数据,mutex 就可以直接引用.而进程有自己独立的内存空间,要怎样将它应用在进程间同步呢?为了达到这一目的,可以在 pthrea ...
- Web笔记(二)Tomcat 使用总结
Tomcat 介绍 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaSe ...
- Ubuntu使用(一)——常用命令与软件安装配置
1.安装输入法 2.配置JDK 3.eclipse 3.1 eclipse启动错误 修改eclipse.init的配置,主要加-vm以及下面的jre路径,路径前别留空格 之前因为加了空格,一直找不到原 ...
- JPA、Hibernate、Spring data jpa之间的关系,终于明白了
什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...
- Try Catch 嵌套问题
程序错误 问题描述: 在一个事物中,插入两张表数据,但是第一个成功,第二个失败了,没有起到所谓的事物的功能,这让我百思不得其解 问题所在: 本质上其实报错了,但是错误被吃掉了,具体来说,就是 try ...
- Jmter接口网站压力测试工具使用记录
1.首先下载Jmeter 官方地址:http://jmeter.apache.org/ 2.安装Jmeter 把下载的文件进行解压,产生如下目录: 打开bin文件夹下的jmeter.bat文件及进入程 ...
- mysql全文索引之模糊查询
旧版的MySQL的全文索引只能用在MyISAM表格的char.varchar和text的字段上. 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息大家可以随时关注官网, ...
- C++中的stack类、QT中的QStack类
C++中的stack 实现一种先进后出的数据结构,是一个模板类. 头文件 #include<stack> 用法(以int型为例): stack <int> s; //定义一个i ...
- json接口返回值
SpringBoot响应客户端渲染数据 1.SpringBoot构造并且返回一个json对象 首先,我们在父包下新建一个pojo的包,并新建一个User类 IDEA自动生成对应的get/set,然后 ...