uniCloud
uniCloud
是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台
怎么使用
uniCloud控制台
前往控制台注册uniCloud账户,新建服务空间,推荐使用阿里云,有免费的服务空间可供学习
创建使用uniCloud的项目
文件>新建>项目>勾选启动uniCloud>选择腾讯云或阿里云
已有项目添加uniCloud
右击项目>创建云开发环境>选择腾讯云或阿里云
会在项目中创建一个uniCloud
文件夹,右击该文件夹关联云服务空间或项目
,选择相应的服务空间
uniCloud
文件夹下有两个文件夹
cloudfunctions
用于存放云函数/云对象database
用于存放DB Schema文件
unicloud支持两种方式操作数据库
- 支持云端(又称后端、服务器端)操作数据库,称为云函数/云对象
- 支持前端直接操作数据库,这个功能被称为clientDB
什么是云函数/云对象
使用js语法进行云端数据库的操作,具体来说,就是js调用uniCloud
这个对象
新建云函数
右击cloudfunctions
文件夹,点击新建云函数/云对象
示例:新建func
云函数,该云函数文件夹下的index.js
中,添加代码如下
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
return db.collection("article").get()
};
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
return db.collection("article").get()
};
调用云函数
前端页面调用
<template>
<view><button @click="get">请求云函数</button></view>
</template>
<script>
export default {
methods: {
get() {
uniCloud
.callFunction({
name: "func1",
})
.then(res => {
console.log(res);
});
},
},
};
</script>
<template>
<view><button @click="get">请求云函数</button></view>
</template>
<script>
export default {
methods: {
get() {
uniCloud
.callFunction({
name: "func1",
})
.then(res => {
console.log(res);
});
},
},
};
</script>
上传云函数至云端
- 上传单个云对象:右击该云对象文件夹,选择
上传部署
- 上传所有云对象:右击
cloudfunctions
文件夹,选择上传所有云函数、公共模块及actions
- 请求报错:
云函数在云端不存在,请检查此云函数名称是否正确以及该云函数是否已上传到服务空间
,检查第一步或第二步是否成功,在HBuilderX里终端勾选连接云端云函数
,重新编译运行
什么是clientDB
前端直接操作数据库,其实也就是在前端vue文件中调用uniCloud.database()
示例:在前端vue文件中请求数据库中article
表的数据
<template>
<view></view>
</template>
<script>
const db = uniCloud.database();
export default {
onLoad() {
this.getData();
},
methods: {
getData() {
db.collection('article')
.get()
.then((res) => {
console.log(res);
});
},
},
};
</script>
<template>
<view></view>
</template>
<script>
const db = uniCloud.database();
export default {
onLoad() {
this.getData();
},
methods: {
getData() {
db.collection('article')
.get()
.then((res) => {
console.log(res);
});
},
},
};
</script>
直接运行控制台会报错:
Uncaught (in promise) Error: 项目database目录下缺少article.schema.json。如云端的该表已配置schema,请下载到database目录中
这是因为没有配置DB Schema文件,请看下一章节(什么是DB Schema)
什么是DB Schema
https://uniapp.dcloud.net.cn/uniCloud/schema.html#db-schema概述
unicloud定义数据表的一种方式,基于这种方式,不仅可以定义一张表的字段,并可以配置权限、格式、校验等等,还可以自动生成代码,提高开发效率
如何编写schema
- 在web控制台编写schema,在
web控制台
创建一个表会创建默认的schema
,database
目录右键可以下载所有DB Schema及扩展校验函数
,会在项目中生成相应*.schema.json
文件 - 在HBuilderX中编写schema,
database
目录右键选择新建DB Schema
,会在项目中生成相应*.schema.json
文件,右击database目录
可以上传所有DB Schema及扩展校验函数
,会在云端生成相应表,这种方式更为推荐,这里只详细介绍这种方式
在HBuilderX中编写schema
HBuilderX中运行前端项目,在控制台选择连接本地云函数,或者本地云函数/云对象直接运行,此时本地编写的schema可直接生效,无需上传。方便编写调试
- 在
uniCloud/database
目录右键选择新建DB Schema
- 名称取为
article.schema.json
- 如果连接的是云端云函数,右键
article.schema.json
,选择上传DB Schema
这时运行的错误变成了Uncaught (in promise) Error: 未能获取当前用户信息:当前用户为匿名身份
这时因为DB Schema做了权限校验,需要修改article.schema.json
中permission
字段,当修改read
属性为true
后,才可以正常获取article
表数据
// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
"bsonType": "object",
"required": [],
"permission": {
"read": false,
"create": false,
"update": false,
"delete": false
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
}
}
}
// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
"bsonType": "object",
"required": [],
"permission": {
"read": false,
"create": false,
"update": false,
"delete": false
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
}
}
}
可视化编辑schema文件插件
推荐使用HBuilderX插件进行可视化地编辑schema文件
安装完在*.schema.json
文件中右击,选择菜单第一项可视化编辑
什么是openDB
unicloud提供了一些数据库表的设计模板,供不太熟悉后端的前端程序员进行参考
什么是JQL语法
这种使用js语法来操作数据库查询表数据的语法,就是jql语法(js+sql结合的意思)
const db = uniCloud.database()
module.exports = {
async get(limit) {
return await db.collection("article").limit(limit).get()
}
}
const db = uniCloud.database()
module.exports = {
async get(limit) {
return await db.collection("article").limit(limit).get()
}
}