uniCloud
如果要在cli项目中使用uniCloud,可以参考以下步骤:
- 将cli项目导入HBuilderX
- 如果没有appid的话,需要打开src/manifest.json,在基础配置-->uni-app应用标识处点击重新获取
- 在项目根目录(src同级)点右键创建uniCloud云开发环境
- 对uniCloud目录点右键关联服务空间
- 完成
云函数/云对象
- 云函数内使用commonjs规范,不可使用import、export,参考:commonjs模块
- 不同项目使用同一个服务空间时,不可使用同名云函数。同名云函数会相互覆盖。
- 在HBuilderX创建云函数时,如果新云函数与服务器上已存在同名云函数,会用新函数覆盖。所以应先选择从服务空间下载云函数。
- 单个云函数大小限制为10M(包含node_modules),过大的云函数影响运行性能,也会增加计费的gbs。同时支付宝小程序云与腾讯云支持在云端安装node_modules,此时不占用云函数体积。
- uniCloud的阿里云版与支付宝小程序云版,暂不可使用相对路径读取文件(比如fs.readFileSync('./info.txt')),可以使用绝对路径fs.readFileSync(path.resolve(__dirname,'./info.txt'))
index.js
js
// 客户端发起调用云函数hellocf.js,并传入data数据
uniCloud.callFunction({
name: 'hellocf',
data: {a:1,b:2}
}).then((res) => {
console.log(res.result) // 结果是 {sum: 3}
})
js
// 云函数hellocf的代码,接收到客户端传递的data,并对其中a和b相加返回给客户端
'use strict';
exports.main = async (event, context) => {
//event为客户端上传的参数
console.log('event : ', event)
//此处省略event.a和event.b的有效性校验
//返回数据给客户端
return {sum : event.a + event.b}
};
index.obj.js
js
// 云对象:testco.obj.js
module.exports = {
sum(a, b) {
// 此处省略a和b的有效性校验
return a + b
}
}
js
// 客户端
const testco = uniCloud.importObject('testco') //第一步导入云对象
async function sum () { //注意方法或生命周期需使用async异步方式
const res = await testco.sum(1,2) //导入云对象后就可以直接调用该对象的方法了,注意使用异步await
console.log(res) // 结果是3
}
package.json
json
{
"name": "add-article",
"version": "1.0.0",
"description": "新增文章",
"main": "index.js",
"dependencies": {
// 云函数的依赖,包括公共模块及自行安装的npm依赖
},
"extensions": {
// 云函数使用的扩展库
},
"cloudfunction-config": {
"memorySize": 256,
"timeout": 5,
"triggers": [{
"name": "myTrigger",
"type": "timer",
"config": "0 0 2 1 * * *"
}],
"path": "",
"runtime": "Nodejs8"
}
}
云数据库
初始化
新增
<unicloud-db>
vue
<script setup>
const udb = ref(null)
const addData = udb.add(value, options)
</script>
- JQL
js
const db = uniCloud.database();
db.collection('xx').add()
删除
<unicloud-db>
vue
<script setup>
const udb = ref(null)
const removeId = udb.remove(id, options)
</script>
- JQL
js
const db = uniCloud.database();
db.collection('xx').doc('xxx').remove()
db.collection('xx').where('xxxx').remove()
修改
<unicloud-db>
vue
<script setup>
const udb = ref(null)
const updateId = udb.update(id, value, options)
</script>
- JQL
js
const db = uniCloud.database();
db.collection('xx').doc('xxx').update({})
db.collection('xx').where('xxxx').update({})
查询
<unicloud-db>
vue
<!-- 通过collection属性指定要查询表“table1”,通过field属性指定要查询字段“field1”,并且在where属性中指定查询id为1的数据。查询结果data就可以直接渲染在界面上。 -->
<unicloud-db ref="udb" v-slot:default="{data, loading, error, options}" collection="table1" field="field1" :getone="true" where="id=='1'">
<view>
{{ data}}
</view>
</unicloud-db>
- JQL
js
const db = uniCloud.database();
const resume = db.collection('resume');
Schema
每张集合,都有一个表名.schema.json的文件,来描述表的信息、字段的信息。
json
{
"bsonType": "object", // 固定节点
"description": "表的描述",
"required": [], // 必填字段
"permission": {
"read": false, // 前端非admin的读取记录权限控制。默认值是false,即可以不写。可以简单的true/false,也可以写表达式
"create": false, // 前端非admin的新增记录权限控制。默认值是false,即可以不写。可以简单的true/false,也可以写表达式
"update": false, // 前端非admin的更新记录权限控制。默认值是false,即可以不写。可以简单的true/false,也可以写表达式
"delete": false, // 前端非admin的删除记录权限控制。默认值是false,即可以不写。可以简单的true/false,也可以写表达式
"count": false // 前端非admin的求数权限控制。默认值是true,即可以不写。可以简单的true/false,也可以写表达式
},
"properties": { // 表的字段清单
"_id": { // 字段名称,每个表都会带有_id字段
"description": "ID,系统自动生成"
// 这里还有很多字段属性可以设置
}
},
"fieldRules":[
// 字段之间的约束关系。比如字段开始时间小于字段结束时间。也可以只校验一个字段。支持表达式
]
}
DANGER
必须通过JQL操作数据库时 DB Schema 才会生效。
创建
- 在uniCloud项目右键,选择创建database目录(如已有目录则忽略)
- 在 database 目录右键选择新建数据集合schema
上传
- 在单个schema文件右键可以只上传当前选中的schema
- 在database目录右键可以上传全部schema
下载
- database目录右键可以下载所有schema及扩展校验函数
schema.ext.js 触发器
用于在执行一段JQL数据库指令(增删改查等)的同时触发相应的操作。在项目的uniCloud/database目录下创建${表名}.schema.ext.js,内容如下
js
module.exports = {
trigger: {
// 注册数据表的read前事件
beforeRead: async function (
// 确定要监听的什么样的JQL指令
{
collection,
operation,
where,
field
} = {}) {
// 当上述jql指令被触发时,将执行这里的代码。这里就是普通的uniCloud代码,可以调用uniCloud的各种api。
console.log("这个触发器被触发了")
},
afterRead: async function ({
collection,
operation,
where,
field
} = {}) {
}
}
}
schema2code 代码生成系统
- 自动生成前端页面,新增、修改、列表、详情页面文件,分别是add.vue、edit.vue、list.vue和detail.vue。
- 自动生成uniCloud admin页面,新增、修改、列表页面文件,分别是add.vue、edit.vue和list.vue。