JS的LeanCloud试玩

介绍

LeanCloud是一款免费的后端数据存储引擎,用法简单,而且免费!免费!免费!

平时写点前端页面,页面本身不难,麻烦的是数据往哪放:自己搭后端得买服务器、装数据库、配域名,一套折腾下来时间和钱都搭进去了。LeanCloud这类服务(Backend as a Service,也就是后端即服务)就是来解决这个问题的,后端它替你准备好,我们注册完拿SDK直接读写数据就行。

据官方介绍,它基于Redis做分布式存储,可以实现用户多点查询,每日查询次数也是十分充足,可以满足一般的项目需求,支持JS、Java、PHP、Python等语言,语法也非常简单。

使用

注册

.png)

打开官网注册页面,按提示把邮箱、密码这些信息填上,收个验证码,一步步走完就行。有账号的话直接登录,省得再注册一遍。

获取ID

登录成功后一般会要求先实名认证,国内平台都是这个流程,按提示认证就可以。

实名认证成功后打开控制台,点击左上角的创建应用,根据描述填写对应信息。

.png)

创建成功后可以进去看看,然后选择设置。

.png)

再点击应用凭证,就能看到自己的APPID和AppKey了,这两个非常重要,相当于应用的身份和钥匙,SDK初始化全靠它们,记得保存一下,别随手写到公开的仓库里。

另外提一句,国内节点的应用一般还需要绑定一个自定义域名才能正常调用接口,初始化里的serverURL填的就是这个域名。前端项目里AppKey是藏不住的,别人查看网页源码就能看到,所以数据安全不能指望它保密,得靠后面在控制台给每个Class配访问权限。

选择语言

这里我拿 Js 做示范,因为JS的SDK可以直接写在HTML里,用浏览器打开就能跑,不用装任何环境,其他语言的套路是一样的,换成对应的SDK就行。

你可以在https://leancloud.cn/docs/看到官方文档,各种语言的起步教程里面都有。

存储

首先导入LeanCloud的数据存储JS库,从CDN把压缩过的SDK拉下来:

1
<script src="//cdn.jsdelivr.net/npm/leancloud-storage@4.11.1/dist/av-min.js"></script>

然后从全局的AV对象里把Query和User解构出来。AV是SDK挂到window上的命名空间,所有功能都从它身上取,User是做账号系统用的类,这里先拿Query备用。

1
const { Query, User } = AV;

注册AV对象,也就是初始化:

1
2
3
4
5
AV.init({
appId: "你的APPID",
appKey: "你的APPKey",
serverURL: "你绑定的域名"
});

初始化必须放在所有读写操作之前,不然调用时会报没有初始化的错,参数里的serverURL就是前面绑定的那个域名。

最后在数据存储里创建Class对象并写入数据:

1
2
3
4
5
6
const TestObject = AV.Object.extend('你的类名');
const testObject = new TestObject();
testObject.set('列名', '数据内容');
testObject.save().then((testObject) => {
console.log('保存成功。')
})

这段代码里,数据存储是按对象来的:一个Class相当于数据库里的一张表,extend出来的TestObject就是这张表的模板,set负责给字段赋值,save返回一个Promise,then里才是保存成功的回调,看到打印“保存成功”就说明数据已经进库了。保存完的对象会自带objectId、createdAt这些属性,objectId相当于主键,后面的查询、更新、删除都靠它定位。

查看一下控制台,如果发现数据存进去了,就说明成功了。

这里要注意一下,必须先手动创建Class和对应的列名才可以存储,不然save会直接报错。还有个连带的坑:列的类型是按第一次写入定下来的,比如列建的是Number,后面set一个字符串进去就存不进去,建列的时候最好想清楚这个字段以后放什么。

查询

利用JS也可以查询LeanCloud里存储的数据,查询对象包括字符串与数组。

1
2
3
4
5
6
const query = new AV.Query('类名');
query.equalTo('列名', '满足条件');
query.find().then((List) => {
// List 是包含满足条件的对象的数组
//然后就可以遍历出满足条件的数据了
});

new AV.Query相当于一条查询语句,equalTo就是筛选条件,可以连着写好几条,彼此之间是“且”的关系。find返回Promise,then里的List就是满足条件对象的数组,遍历时用item.get(‘列名’)就能把值取出来,查询是异步的,别在find外面直接拿List用。

也可以根据条件做排除查询,比如

1
query.notEqualTo('类目', '条件');//notEqualTo是排除查询,将条件之外的数据查询出并返回

数字、字符串这些能比较的属性,还能用下面这些条件:

1
2
3
4
5
6
7
8
// 限制 age < 18
query.lessThan('age', 18);
// 限制 age <= 18
query.lessThanOrEqualTo('age', 18);
// 限制 age > 18
query.greaterThan('age', 18);
// 限制 age >= 18
query.greaterThanOrEqualTo('age', 18);

查询字符串也是可以的:

1
2
3
4
5
6
7
8
const query = new AV.Query('类名');
//多查询
query.startsWith('列名', '起点');
//单查询
query.contains('列名', '目标');
//正则查询
const regExp = new RegExp(表达式);
query.matches('列名', regExp);

startsWith是前缀匹配,contains是包含匹配,matches接正则。正则别写得太复杂,服务端匹配是要花时间的。

还有个容易踩的坑:查询默认一次只返回前100条数据,最大也只能调到1000条,数据多了必须自己用limit和skip做分页,不然悄悄丢了数据都不知道。多个条件直接连着加就行,如果要做“或”的查询,得用AV.Query.or把两个查询拼起来。

总结

LeanCloud用来记录点信息、做个小项目的后端是够用了,注册、初始化、存取、查询这一圈走下来没什么绕的地方,免费额度练手正合适。不过免费服务总有它的边界,需要长期保存或者安全要求高的数据,还是老老实实上正经的数据库吧~

感兴趣的可以拿它给博客加个阅读量统计或者点赞按钮,正好把这一套API练熟。


JS的LeanCloud试玩
https://blog.minloha.cn/posts/15262325a87c12021062623.html
作者
Minloha
发布于
2021年6月26日
更新于
2021年6月26日
许可协议