Skip to content

uniCloud

如果要在cli项目中使用uniCloud,可以参考以下步骤:

  1. 将cli项目导入HBuilderX
  2. 如果没有appid的话,需要打开src/manifest.json,在基础配置-->uni-app应用标识处点击重新获取
  3. 在项目根目录(src同级)点右键创建uniCloud云开发环境
  4. 对uniCloud目录点右键关联服务空间
  5. 完成

云函数/云对象

  • 云函数内使用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 才会生效。

创建

  1. 在uniCloud项目右键,选择创建database目录(如已有目录则忽略)
  2. 在 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。

读书、摄影、画画、弹琴、编程