Skip to content
索引

uniCloud

uniCloud 是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台

怎么使用

uniCloud控制台

https://unicloud.dcloud.net.cn/pages/login/login

前往控制台注册uniCloud账户,新建服务空间,推荐使用阿里云,有免费的服务空间可供学习

创建使用uniCloud的项目

文件>新建>项目>勾选启动uniCloud>选择腾讯云或阿里云

已有项目添加uniCloud

右击项目>创建云开发环境>选择腾讯云或阿里云

会在项目中创建一个uniCloud文件夹,右击该文件夹关联云服务空间或项目,选择相应的服务空间

uniCloud文件夹下有两个文件夹

  • cloudfunctions 用于存放云函数/云对象
  • database 用于存放DB Schema文件

unicloud支持两种方式操作数据库

  • 支持云端(又称后端、服务器端)操作数据库,称为云函数/云对象
  • 支持前端直接操作数据库,这个功能被称为clientDB

什么是云函数/云对象

使用js语法进行云端数据库的操作,具体来说,就是js调用uniCloud这个对象

新建云函数

右击cloudfunctions文件夹,点击新建云函数/云对象

示例:新建func云函数,该云函数文件夹下的index.js中,添加代码如下

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()
};

调用云函数

前端页面调用

vue
<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>

上传云函数至云端

  1. 上传单个云对象:右击该云对象文件夹,选择上传部署
  2. 上传所有云对象:右击cloudfunctions文件夹,选择上传所有云函数、公共模块及actions
  3. 请求报错:云函数在云端不存在,请检查此云函数名称是否正确以及该云函数是否已上传到服务空间,检查第一步或第二步是否成功,在HBuilderX里终端勾选连接云端云函数,重新编译运行

什么是clientDB

https://uniapp.dcloud.net.cn/uniCloud/clientdb.html

前端直接操作数据库,其实也就是在前端vue文件中调用uniCloud.database()

示例:在前端vue文件中请求数据库中article表的数据

vue
<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控制台创建一个表会创建默认的schemadatabase目录右键可以下载所有DB Schema及扩展校验函数,会在项目中生成相应*.schema.json文件
  • 在HBuilderX中编写schema,database目录右键选择新建DB Schema,会在项目中生成相应*.schema.json文件,右击database目录可以上传所有DB Schema及扩展校验函数,会在云端生成相应表,这种方式更为推荐,这里只详细介绍这种方式

在HBuilderX中编写schema

HBuilderX中运行前端项目,在控制台选择连接本地云函数,或者本地云函数/云对象直接运行,此时本地编写的schema可直接生效,无需上传。方便编写调试

  1. uniCloud/database目录右键选择新建DB Schema
  2. 名称取为article.schema.json
  3. 如果连接的是云端云函数,右键article.schema.json,选择上传DB Schema

这时运行的错误变成了Uncaught (in promise) Error: 未能获取当前用户信息:当前用户为匿名身份

这时因为DB Schema做了权限校验,需要修改article.schema.jsonpermission字段,当修改read属性为true后,才可以正常获取article表数据

json
// 文档教程: 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文件

https://ext.dcloud.net.cn/plugin?name=bctos-schema2view

安装完在*.schema.json文件中右击,选择菜单第一项可视化编辑

什么是openDB

https://uniapp.dcloud.net.cn/uniCloud/opendb.html

unicloud提供了一些数据库表的设计模板,供不太熟悉后端的前端程序员进行参考

什么是JQL语法

这种使用js语法来操作数据库查询表数据的语法,就是jql语法(js+sql结合的意思)

js
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()
  }
}

Released under the MIT License.