3.客户端直连数据库引入schema表结构概念

153 阅读2分钟

客户端直接连数据库

把之前在云函数中连接数据库的代码写到前端页面中来,

<script>
  const db=uniCloud.database();
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
      this.getData();
		},
		methods: {
      getData(){
        db.collection("article").get().then(res=>{
          console.log(res);
        })
      }
		}
	}
</script>

浏览器控制台会提示要配置一个json文件 image.png

schema:架构 就是通过schema来控制数据库的权限

创建schema

有两种方式创建schema,一种是在unicloud网页端控制台,一种是在项目目录下的database文件夹里

image.png

右键文件夹,选择下载所有的DBschema(数据库里已经有article这张数据表了,所以可以下载) image.png

下载下来是这样的 image.png

这段表结构web端和下载下来的文件是一模一样的,是用来控制数据表权限的

{
	"bsonType": "object",
	"required": [],
	"permission": {
		"read": false,
		"create": false,
		"update": false,
		"delete": false
	},
	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		}
	}
}

这个DBschema是下载下来的,如果没有创建数据库,云端就没有这个文件,可以在编辑器中手动创建,右键database文件夹,点击新建dbschema

image.png

创建一个cloudDemo,未来创建的数据表名称也要是这个名,在本地创建完了之后,还要右键这个文件点上传,因为云端没有这个文件

image.png

点击上传,会弹出这个窗口,点是 image.png

然后云端就创建了一个叫cloudDemo的数据表 image.png

在客户端连接数据库的这个问题是两个问题,第一个是缺少schema文件,上面解决了,第二个问题是匿名用户 image.png

image.png

匿名用户不允许看数据库, 在schema文件中,有一个属性permission,他的增删改查四个属性全是false,所以不能用,只要把read属性改成true,就不会报这个错了,这就是scheam对连接数据库的权限控制,连接数据库就要先通过scheam文件的校验,校验通过才允许连接

permission属性不仅仅能设置true和false,还能通过where设置条件 image.png

现在连接的是article数据表,把这个表结构的schema文件的read改成true,就直接通过客户端获取到数据了

// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
	"bsonType": "object",
	"required": [],
	"permission": {
		"read": true,
		"create": false,
		"update": false,
		"delete": false
	},
	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		}
	}
}

现在不报错了 image.png