Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yangkaifeng
uni-app
提交
5672cb45
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,发现更多精彩内容 >>
提交
5672cb45
编写于
9月 26, 2020
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: uni-clientDB example
上级
b6777a63
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
54 addition
and
58 deletion
+54
-58
docs/uniCloud/uni-clientDB.md
docs/uniCloud/uni-clientDB.md
+54
-58
未找到文件。
docs/uniCloud/uni-clientDB.md
浏览文件 @
5672cb45
...
...
@@ -55,8 +55,8 @@ clientDB的目标,就是让上述无聊的服务端代码开发,从此消失
3.
上传公共模块及云函数,公共模块用法参考
[
使用公共模块
](
https://uniapp.dcloud.net.cn/uniCloud/cf-common
)
4.
运行项目即可
## 目录结构@structure
## 目录结构@structure
uni-clientDB项目目录结构如下
<pre
v-pre=
""
data-lang=
""
>
...
...
@@ -141,13 +141,13 @@ clientDB目前内置了3个变量可以供客户端使用,客户端并非直
2.
validator目录用于存放字段数据校验规则。和db-permission一样,validator目录下每个文件的文件名对应一个表名。
3.
action目录下的预处理后处理逻辑。action下每个目录对应一个操作,前端页面在callFunction时传入action参数指明当前操作需要使用哪个action(可以在权限规则内指定某些操作必须使用指定的action,比如
`"action in ['action-a','action-b']"`
)
**注意**
-
clientDB依赖uni-id提供用户身份,如果你不了解uni-id,请参考
[
uni-id文档
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id
)
-
通常在管理控制台使用clientDB,需要获取不同角色用户拥有的权限(在权限规则内使用auth.permission),请先查阅
[
uni-id 角色权限
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=rbac
)
**注意**
-
clientDB依赖uni-id提供用户身份,如果你不了解uni-id,请参考
[
uni-id文档
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id
)
-
通常在管理控制台使用clientDB,需要获取不同角色用户拥有的权限(在权限规则内使用auth.permission),请先查阅
[
uni-id 角色权限
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=rbac
)
**云函数内部执行顺序**
![](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b7d96a10-ff35-11ea-8ff1-d5dcf8779628.jpg
)
云函数默认返回值形式如下,开发者可以在action的after内修改返回结果,传入after内的result不带code和message。
...
...
@@ -186,8 +186,8 @@ clientDB目前内置了3个变量可以供客户端使用,客户端并非直
可以参考db-permission内的使用示例说明
### db-permission
db-permission内为数据表权限,以表名作为文件名,clientDB会自动读取要访问的表的权限。
db-permission内为数据表权限,以表名作为文件名,clientDB会自动读取要访问的表的权限。
使用db-permission之前需要先了解以下db-permission的原理。db-permission会对客户端上传的数据库指令进行校验,即客户端的查询条件应该满足db-permission内规定的条件。比如db-permission内规定doc.a > 1,那么查询条件里面就必须有a且条件内的a也满足a>1,
`{a:2}`
、
`{a:db.command.gt(3)}`
都是满足条件的查询。
...
...
@@ -229,44 +229,40 @@ module.exports = {
import
db
from
'
@/js_sdk/uni-clientDB/index.js
'
const
dbCmd
=
db
.
command
const
$
=
dbCmd
.
aggregate
uniCloud
.
callFunction
({
name
:
'
uni-clientDB
'
,
data
:
{
command
:
db
.
collection
(
'
order
'
).
aggregate
()
// 此match方法内的条件会和order表对应的权限规则进行校验
.
match
({
uid
:
db
.
env
.
uid
})
// 此project方法是为了确定查询需要访问order表的哪些字段
.
project
({
_id
:
true
,
book_id
:
true
})
.
lookup
({
from
:
'
book
'
,
let
:
{
book_id
:
'
$book_id
'
db
.
collection
(
'
order
'
)
.
aggregate
()
// 此match方法内的条件会和order表对应的权限规则进行校验
.
match
({
uid
:
db
.
env
.
uid
})
// 此project方法是为了确定查询需要访问order表的哪些字段
.
project
({
_id
:
true
,
book_id
:
true
})
.
lookup
({
from
:
'
book
'
,
let
:
{
book_id
:
'
$book_id
'
},
pipeline
:
$
.
pipeline
()
// 此match方法内的条件会和book表对应的权限规则进行校验,{status: 'OnSell'}会参与校验,整个expr方法转化成一个不与任何条件产生交集的特别表达式。这里如果将dbCmd.and换成dbCmd.or会校验不通过
.
match
(
dbCmd
.
and
([
{
status
:
'
OnSell
'
},
pipeline
:
$
.
pipeline
()
// 此match方法内的条件会和book表对应的权限规则进行校验,{status: 'OnSell'}会参与校验,整个expr方法转化成一个不与任何条件产生交集的特别表达式。这里如果将dbCmd.and换成dbCmd.or会校验不通过
.
match
(
dbCmd
.
and
([
{
status
:
'
OnSell
'
},
// 指定book表的_id等于order表的book_id
dbCmd
.
expr
(
$
.
eq
([
'
$_id
'
,
'
$$book_id
'
])
)
]))
// 此project方法是为了确定查询需要访问book表的哪些字段
.
project
({
book_name
:
true
})
.
done
()
// 指定book表的_id等于order表的book_id
dbCmd
.
expr
(
$
.
eq
([
'
$_id
'
,
'
$$book_id
'
])
)
]))
// 此project方法是为了确定查询需要访问book表的哪些字段
.
project
({
book_name
:
true
})
.
end
()
}
}
)
.
done
()
}
)
.
end
(
)
```
...
...
@@ -326,18 +322,18 @@ db.collection('street').where(dbCmd.or([
])).
get
()
```
### action
### action
action主要用于进行数据操作前后处理数据
```
js
// 客户端指定action为add-todo
import
db
from
'
@/js_sdk/uni-clientDB/index.js
'
db
.
action
(
'
add-todo
'
)
import
db
from
'
@/js_sdk/uni-clientDB/index.js
'
db
.
action
(
'
add-todo
'
)
.
collection
(
'
todo
'
)
.
add
({
title
:
'
todo title
'
})
})
.
then
(
res
=>
{
console
.
log
(
res
)
}).
catch
(
err
=>
{
...
...
@@ -363,10 +359,10 @@ module.exports = {
// event为传入云函数的event对象
// error为执行操作的错误对象,如果没有错误error的值为null
// result为执行command返回的结果
if
(
error
)
{
throw
error
}
if
(
error
)
{
throw
error
}
// after内可以对result进行额外处理并返回,如果有after方法,则云函数返回值会是after方法的返回值
result
.
msg
=
'
hello
'
...
...
@@ -380,18 +376,18 @@ module.exports = {
```
js
// state参数格式如下
{
command
:
{
command
:
{
// getMethod('where') 获取所有的where方法,返回结果为[{$method:'where',$param: [{a:1}]}]
getMethod
,
getMethod
,
// getMethod({name:'where',index: 0}) 获取第1个where方法的参数,结果为数组形式,例:[{a:1}]
getParam
,
getParam
,
// setParam({name:'where',index: 0, param: [{a:1}]}) 设置第1个where方法的参数,调用之后where方法实际形式为:where({a:1})
setParam
},
// 需要注意的是clientDB可能尚未获取用户信息,如果权限规则内没使用auth对象且数据库指令里面没使用db.env.uid则clientDB不会自动取获取用户信息
auth
:
{
uid
,
// 用户ID,如果未获取或者获取失败uid值为null
role
,
// 通过uni-id获取的用户角色,需要使用1.1.9以上版本的uni-id,如果未获取或者获取失败role值为[]
role
,
// 通过uni-id获取的用户角色,需要使用1.1.9以上版本的uni-id,如果未获取或者获取失败role值为[]
permission
,
// 通过uni-id获取的用户权限,需要使用1.1.9以上版本的uni-id,如果未获取或者获取失败permission值为[],注意登录时传入needPermission才可以获取permission,请参考 https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=rbac
checked
// 是否已经获取了用户信息
},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录