Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yangkaifeng
uni-app
提交
86294bc9
U
uni-app
项目概览
yangkaifeng
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
86294bc9
编写于
9月 26, 2020
作者:
W
wanganxp
提交者:
GitHub
9月 26, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update schema.md
上级
2ff263af
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
242 addition
and
214 deletion
+242
-214
docs/uniCloud/schema.md
docs/uniCloud/schema.md
+242
-214
未找到文件。
docs/uniCloud/schema.md
浏览文件 @
86294bc9
# DB Schema
# DB Schema
DB Schema是一种基于 JSON 格式定义的数据结构的规范
DB Schema是一种基于 JSON 格式定义的数据结构的规范
。
*
描述现有的数据格式。
*
描述现有的数据格式。
*
提供清晰的人类和机器可读文档。
*
提供清晰的人类和机器可读文档
,你可以一目了然的阅读每个表、每个字段的用途
。
*
完整的结构验证,有利于自动化测试。
*
完整的结构验证,有利于自动化测试。
*
完整的结构验证,可用于验证客户端提交的数据。
*
完整的结构验证,可用于验证客户端提交的数据。
*
可自动生成ui维护界面,比如新建页面和编辑页面,自动处理校验规则。(暂未上线)
MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有所不同。uniCloud在此基础上进行了扩展。
MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有所不同。
使用 DB Schema 表结构来统一管理permission和validator,可以通过表结构一键生成前端页面和clientDB权限及验证规则
#### 如何体验
#### 如何体验
...
@@ -19,59 +16,73 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -19,59 +16,73 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
1.
登录 uniCloud控制台
[
https://unicloud.dcloud.net.cn
](
https://unicloud.dcloud.net.cn
)
1.
登录 uniCloud控制台
[
https://unicloud.dcloud.net.cn
](
https://unicloud.dcloud.net.cn
)
2.
选择 “服务空间/创建服务空间”,然后在左侧栏选择 “云数据库”
2.
选择 “服务空间/创建服务空间”,然后在左侧栏选择 “云数据库”
3.
选择 已有表或新建表,点击表右侧页签 “表结构”
3.
选择 已有表或新建表,点击表右侧页签 “表结构”
4.
点击 “编辑” 按钮,在编辑区域编写 Schema
4.
点击 “编辑” 按钮,在编辑区域编写 Schema
,编写完毕后记得点保存按钮。
!
[](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/e237cb60-ff2d-11ea-8a36-ebb87efcf8c0.png
)
!
[](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/e237cb60-ff2d-11ea-8a36-ebb87efcf8c0.png
)
5.
点击 “导出表单页面”,将导出clientDB工程,
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=structure
)
编写好schema后,您可以进一步导出表单校验规则。方法如下:
1.
点击 “导出表单校验规则”,在左侧选择要校验的字段,然后点击“下载zip”按钮,将导出一个工程源码压缩包,其中含有clientDB、uni-id等库,最重要的是cloudfunctions目录下uni-clientDB/validator/下的js文件。该文件包含了根据schema生成的校验规则。
!
[](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/38cdc790-ff2e-11ea-9dfb-6da8e309e0d8.png
)
!
[](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/38cdc790-ff2e-11ea-9dfb-6da8e309e0d8.png
)
6.
解压导出的zip包,拷贝到已有工程(以后支持直接导入到HBuilderX)
2.
解压导出的zip包,拷贝到已有工程(以后会支持直接导入到HBuilderX)
-
如果你的项目下还没有clientDB,可以把整个zip解压到工程下,然后上传云函数到服务空间。
-
如果你的项目下已经有clientDB,且版本大于等于2.0,只需要把zip里的cloudfunctions目录下uni-clientDB/validator/下的js文件copy到工程的对应目录下即可。如果你已经自行编写过db-permisstion文件,注意不要把db-permisstion也覆盖了,如果您未编写过db-permisstion,可以覆盖过去,并打开该文件根据自己的需求进行修改。
clientDB的工程目录结构见:
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=structure
)
注意数据校验,只有使用clientDB 2.0+,才有效。不用clientDB,在云函数中直接操作数据库无法使用该校验规则。
#### Schema字段
#### Schema字段
|属性|类型|描述|
|属性|类型|描述|
|:-|:-|:-|
|:-|:-|:-|
|required|array|必填
字段
|
|required|array|必填
的下级字段名称。required可以在表级的描述出现,约定该表有哪些字段必填。也可以在某个字段中出现,如果该字段是一个json,可以对这个json中的哪些字段必填进行描述。详见下方示例
|
|bsonType|any|字
符
类型|
|bsonType|any|字
段类型,如json object、字符串、bool值,具体见下表bsonType可用
类型|
|enum|Array|
值范围,数组
至少要有一个元素,且数组内的每一个元素都是唯一的。|
|enum|Array|
字段值枚举范围,数组中
至少要有一个元素,且数组内的每一个元素都是唯一的。|
|maximum|number|
校验最大值(大于)
|
|maximum|number|
如果bsonType为数字时,可接受的最大值
|
|exclusiveMaximum|boolean|是否排除 maximum|
|exclusiveMaximum|boolean|是否排除 maximum|
|minimum|number|
校验最小值(小于)
|
|minimum|number|
如果bsonType为数字时,可接受的最小值
|
|exclusiveMinimum|boolean|是否排除 minimum|
|exclusiveMinimum|boolean|是否排除 minimum|
|minLength|number|校验最小长度|
|minLength|number|最小长度|
|maxLength|number|校验最大长度|
|maxLength|number|最大长度|
|foramat|string|数据格式|
|title|string|标题,开发者维护时自用|
|title|string|标题,一般用来进行简单的描述,可以省略|
|description|string|描述,开发者维护时自用|
|description|string|描述|
|label|string|字段标题|
|format|'url'
|
'email'|数据格式|
|format|'url'
|
'email'|数据格式|
|pattern|String|正则表达式,如设置为手机号的正则表达式后,不符合该正则表达式则校验失败|
|label|string|字段标题。用于生成数据维护ui界面时,渲染表单项前面的label标题|
|defaultValue|string
|
Object|默认值|
|defaultValue|string
|
Object|默认值|
|forceDefaultValue|string
|
Object|
覆盖默认值,参考
defaultValue|
|forceDefaultValue|string
|
Object|
强制默认值,不可通过clientDB的代码修改,常用于存放用户id、时间、客户端ip等固定值。具体参考下表的
defaultValue|
|errorMessage|string
|
Object |
验证
提示|
|errorMessage|string
|
Object |
当数据写入或更新时,校验数据合法性失败后,返回的错误
提示|
|
order|int|表单排序
|
|
group|string|分组id。生成数据维护ui界面时,多个字段对应的表单项可以合并显示在一个uni-group组件中
|
|
group|string|分组名称
|
|
order|int|表单项排序序号。生成数据维护ui界面时,该字段对应的表单项所处排序位置的序号。如果被包含在uni-group中,按同组排序
|
|component|Object|
组件信息
|
|component|Object|
生成数据维护ui界面时,使用什么组件渲染这个表单项。比如使用uni-field输入框。详见下方示例
|
**注意:**
1.
数据校验,只有使用clientDB 2.0+,才有效。不用clientDB,在云函数中直接操作数据库无法使用该校验规则
2.
生成数据维护ui页面,该功能暂未开放。
### bsonType可用类型
### bsonType可用类型
|类型
|长度 |别名
|
|类型
|长度 |名称
|
|:-
|:-|:-
|
|:-
|:- |:-
|
|Double
|1 |“double”
|
|Double
|1 |“double”
|
|String
|2 |“string”
|
|String
|2 |“string”
|
|Object
|3 |“object”
|
|Object
|3 |“object”
|
|Array
|4 |“array”
|
|Array
|4 |“array”
|
|Boolean
|8 |“bool”
|
|Boolean
|8 |“bool”
|
|32-bit integer
|16 |“int”
|
|32-bit integer
|16 |“int”
|
|Timestamp
|17 |“timestamp”
|
|Timestamp
|17 |“timestamp”
|
注意:在schema描述中需要使用上述表格中的“名称”,而不是“类型”。
### 示例
### 示例
假使一个表有5个字段:"name", "year", "major", "address", "gpa"。其中前4个字段是必填字段,然后"address"字段类型为json object,下面又有若干子字段,其中"city"字段必填。
则schema按如下编写。
```
json
```
json
{
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
,
"year"
,
"major"
,
"address"
],
"required"
:
[
"name"
,
"year"
,
"major"
,
"address"
],
"properties"
:
{
"properties"
:
{
"name"
:
{
"name"
:
{
...
@@ -111,16 +122,192 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -111,16 +122,192 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
```
```
### defaultValue/forceDefaultValue
-
defaultValue指定新增时当前字段默认值,客户端可以修改此值。
-
forceDefaultValue也是指定新增时当前字段的默认值,与defaultValue不一样,forceDefaultValue不可被客户端修改。
在实际开发中,forceDefaultValue设置为当前时间、用户id、客户端ip时,可以少些很多代码,clientDB在新增数据记录时会自动补齐这些数据。这些数据都不能通过客户端上传,不安全,只能在云端写入。
其中uid是和uni-id绑定的。如果用户没有登录,会报错,无法写入数据。
示例:
```
json
//
指定默认值为
true
"defaultValue"
:
true
//
指定强制默认值为当前时间戳
"forceDefaultValue"
:
{
"$env"
:
"now"
}
//
指定强制默认值为当前客户端IP
"forceDefaultValue"
:
{
"$env"
:
"clientIP"
}
//
指定强制默认值为当前客户id
"forceDefaultValue"
:
{
"$env"
:
"uid"
}
```
默认值
`"defaultValue": ...`
,指定默认值为当前时间戳。新增记录时,若clientDB不传该字段,则默认为当前时间。若clientDB传一个不同的值,则以传的值为准。
```
json
{
"bsonType"
:
"object"
,
"required"
:
[],
"properties"
:
{
"create_time"
:
{
"bsonType"
:
"timestamp"
,
"label"
:
"创建时间"
,
"defaultValue"
:
{
"$env"
:
"now"
}
}
}
}
```
强制默认值,覆盖默认值
`"forceDefaultValue": ...`
,指定默认值为当前时间戳。此时clientDB传任何值均无效,新增记录时一定会变成当前时间。
```
json
{
"bsonType"
:
"object"
,
"required"
:
[],
"properties"
:
{
"create_time"
:
{
"bsonType"
:
"timestamp"
,
"label"
:
"创建时间"
,
"forceDefaultValue"
:
{
"$env"
:
"now"
}
}
}
}
```
### 校验规则@validator
与数据校验相关的配置如下:
必填字段,
`"required": ["name"]`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"errorMessage"
:
"{label}不能为空"
}
}
}
```
数据是否有效,
`"required": []`
不包含
`name`
字段,当
`name`
无值时不校验,有值时校验
```
json
{
"bsonType"
:
"object"
,
"required"
:
[],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"minLength"
:
2
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"minLength"
:
"{label}不能小于 {minLength} 个字符"
}
}
}
}
```
类型
`"bsonType": "string"`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"errorMessage"
:
"类型无效"
}
}
}
```
格式
`"format": "email"`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"email"
],
"properties"
:
{
"email"
:
{
"bsonType"
:
"string"
,
"label"
:
"邮箱"
,
"format"
:
"email"
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"format"
:
"{label}格式无效"
}
}
}
}
```
正则
`"pattern": ""`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"pattern"
:
""
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"pattern"
:
"{label}格式无效"
}
}
}
}
```
### errorMessage属性
### errorMessage属性
类型为对象时可定义多个
clientDB的validator校验库,会根据schema配置的规范进行校验。数据不符合要求时,无法入库,此时会根据errorMessage的定义报出错误提示。
{} 为占位符,可定义已有属性
|属性|类型|描述|
errorMessage支持字符串,也支持json object。类型为object时,可定义多个校验提示。
|:-|:-|:-|
|minLength|string|消息|
{} 为占位符,可在其中引用已有属性。
|maxLength|string|消息|
|...|...|...|
|属性 |类型 |描述 |
|:- |:- |:- |
|minLength |string |消息 |
|maxLength |string |消息 |
|... |... |... |
示例
示例
...
@@ -152,9 +339,13 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -152,9 +339,13 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
```
```
### component属性
### component属性(暂未开放)
该字段在表单中使用什么样的组件进行渲染,可设置组件名和初始属性。
这里的表单,指的是数据维护表单,比如新建记录或修改记录的表单。
组件节点信息,包含组件名和属性
生成的所有表单项,都在uni-form组件下。
|属性|类型|描述|
|属性|类型|描述|
|:-|:-|:-|
|:-|:-|:-|
...
@@ -162,7 +353,7 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -162,7 +353,7 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
|props|Object|组件属性|
|props|Object|组件属性|
###
示例
示例
```
json
```
json
{
{
...
@@ -238,9 +429,9 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -238,9 +429,9 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
### group属性
### group属性
(暂未开放)
将多个
组件放到一个分组里
将多个
表单项合并在一个分组里显示。前端渲染时,group相关的自动会合并在一个uni-group组件中,不同分组的表单项之间有间隔。
示例
示例
```
json
```
json
...
@@ -251,7 +442,7 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -251,7 +442,7 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
"name"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"label"
:
"姓名"
,
"group"
:
"
基本信息
"
,
"group"
:
"
1
"
,
"minLength"
:
2
,
"minLength"
:
2
,
"maxLength"
:
8
,
"maxLength"
:
8
,
"errorMessage"
:
{
"errorMessage"
:
{
...
@@ -274,7 +465,7 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -274,7 +465,7 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
"age"
:
{
"age"
:
{
"bsonType"
:
"int"
,
"bsonType"
:
"int"
,
"label"
:
"年龄"
,
"label"
:
"年龄"
,
"group"
:
"
基本信息
"
,
"group"
:
"
1
"
,
"minimum"
:
0
,
"minimum"
:
0
,
"maximum"
:
150
,
"maximum"
:
150
,
"errorMessage"
:
"{label}应该大于 {minimum} 岁,小于 {maximum} 岁"
,
"errorMessage"
:
"{label}应该大于 {minimum} 岁,小于 {maximum} 岁"
,
...
@@ -295,173 +486,10 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
...
@@ -295,173 +486,10 @@ MongoDB支持JSON Schema的草案4,包括核心规范和验证规范,但有
```
```
...
...
<uni-group
title="基本信息"
>
<uni-group>
<uni-field label="姓名" placeholder="请输入姓名" class="input" :hidden="false" :readonly="false" :disabled="false" />
<uni-field label="姓名" placeholder="请输入姓名" class="input" :hidden="false" :readonly="false" :disabled="false" />
<uni-field label="年龄" placeholder="请输入年龄" />
<uni-field label="年龄" placeholder="请输入年龄" />
</uni-group>
</uni-group>
...
...
```
```
### defaultValue/forceDefaultValue
defaultValue指定新增时当前字段默认值,客户端可以修改此值。forceDefaultValue也是指定新增时当前字段的默认值,与defaultValue不一样,forceDefaultValue不可被客户端修改。
```
json
//
指定默认值为
true
"defaultValue"
:
true
//
指定强制默认值为当前时间戳
"forceDefaultValue"
:
{
"$env"
:
"now"
}
//
指定强制默认值为当前客户端IP
"forceDefaultValue"
:
{
"$env"
:
"clientIP"
}
//
指定强制默认值为当前客户id
"forceDefaultValue"
:
{
"$env"
:
"uid"
}
```
### 校验规则@validator
必填字段,
`"required": ["name"]`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"errorMessage"
:
"{label}不能为空"
}
}
}
```
数据是否有效,
`"required": []`
不包含
`name`
字段,当
`name`
无值时不校验,有值时校验
```
json
{
"bsonType"
:
"object"
,
"required"
:
[],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"minLength"
:
2
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"minLength"
:
"{label}不能小于 {minLength} 个字符"
}
}
}
}
```
类型
`"bsonType": "string"`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"errorMessage"
:
"类型无效"
}
}
}
```
格式
`"format": "email"`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"email"
],
"properties"
:
{
"email"
:
{
"bsonType"
:
"string"
,
"label"
:
"邮箱"
,
"format"
:
"email"
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"format"
:
"{label}格式无效"
}
}
}
}
```
正则
`"pattern": ""`
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"pattern"
:
""
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"pattern"
:
"{label}格式无效"
}
}
}
}
```
默认值
`"defaultValue": ...`
,指定默认值为当前时间戳
```
json
{
"bsonType"
:
"object"
,
"required"
:
[],
"properties"
:
{
"create_date"
:
{
"bsonType"
:
"timestamp"
,
"label"
:
"创建时间"
,
"defaultValue"
:
{
"$env"
:
"now"
}
}
}
}
```
强制默认值,覆盖默认值
`"forceDefaultValue": ...`
,指定默认值为当前时间戳
```
json
{
"bsonType"
:
"object"
,
"required"
:
[],
"properties"
:
{
"create_date"
:
{
"bsonType"
:
"timestamp"
,
"label"
:
"创建时间"
,
"forceDefaultValue"
:
{
"$env"
:
"now"
}
}
}
}
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录