Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
47cb9407
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
725
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
47cb9407
编写于
5月 20, 2021
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: uniCloud doc review
上级
a83bc1fb
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
60 addition
and
26 deletion
+60
-26
docs/uniCloud/_sidebar.md
docs/uniCloud/_sidebar.md
+1
-1
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+27
-0
docs/uniCloud/clientdb.md
docs/uniCloud/clientdb.md
+18
-10
docs/uniCloud/concepts/space.md
docs/uniCloud/concepts/space.md
+1
-1
docs/uniCloud/hellodb.md
docs/uniCloud/hellodb.md
+3
-3
docs/uniCloud/jql-runner.md
docs/uniCloud/jql-runner.md
+1
-1
docs/uniCloud/price.md
docs/uniCloud/price.md
+1
-1
docs/uniCloud/quickstart.md
docs/uniCloud/quickstart.md
+6
-7
docs/uniCloud/schema.md
docs/uniCloud/schema.md
+2
-2
未找到文件。
docs/uniCloud/_sidebar.md
浏览文件 @
47cb9407
...
...
@@ -12,7 +12,7 @@
*
[
数据库索引
](
uniCloud/db-index.md
)
*
[
前端操作数据库的API及JQL语法
](
uniCloud/clientdb.md
)
*
[
unicloud-db前端组件
](
uniCloud/unicloud-db.md
)
*
[
JQL
查询调试器
](
uniCloud/jql-runner.md
)
*
[
JQL
数据库管理
](
uniCloud/jql-runner.md
)
*
[
openDB
](
https://gitee.com/dcloud/opendb
)
*
[
性能优化
](
uniCloud/db-performance.md
)
*
云函数
...
...
docs/uniCloud/cf-functions.md
浏览文件 @
47cb9407
...
...
@@ -201,6 +201,33 @@ console.log(res)
}
}
```
**发送formdata类型数据**
实际业务中常有使用云函数发送formdata类型数据的需求,比如微信小程序提供的一些服务端接口(图片内容安全检测、识别图片二维码等),可以参考以下示例进行发送
```
js
'
use strict
'
;
const
fs
=
require
(
'
fs
'
)
const
path
=
require
(
'
path
'
)
const
FormData
=
require
(
'
form-data
'
);
// 此form-data需要使用npm安装,地址:https://www.npmjs.com/package/form-data
exports
.
main
=
async
(
event
,
context
)
=>
{
const
form
=
new
FormData
()
form
.
append
(
'
media
'
,
fs
.
readFileSync
(
path
.
resolve
(
__dirname
,
'
./test.jpg
'
)),
{
// 为方便演示此处直接使用云函数目录下的test.jpg文件
filename
:
'
test.jpg
'
,
contentType
:
'
image/jpeg
'
});
form
.
append
(
'
otherParam
'
,
'
otherParam content
'
);
const
res
=
await
uniCloud
.
httpclient
.
request
(
'
https://httpbin.org/post
'
,
{
method
:
'
POST
'
,
content
:
form
.
getBuffer
(),
// 请求内容
headers
:
form
.
getHeaders
(),
// 请求头
dataType
:
'
json
'
// 此处指定为json表示将此请求的返回值解析为json
})
return
res
};
```
## 使用npm
...
...
docs/uniCloud/clientdb.md
浏览文件 @
47cb9407
...
...
@@ -265,7 +265,7 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
```
js
const
db
=
uniCloud
.
database
()
//
上面的示例中的where条件可以使用以下写法
//
使用`jql`查询list表内`name`字段值为`hello-uni-app`的记录
db
.
collection
(
'
list
'
)
.
where
(
'
name == "hello-uni-app"
'
)
.
get
()
...
...
@@ -295,11 +295,11 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
以下变量同
[
前端环境变量
](
uniCloud/database.md?id=variable
)
|参数名
|说明
|
|:-:
|:-:
|
|$
env.uid
|用户uid,依赖uni-id|
|$
env.now |服务器时间戳
|
|$
env.clientIP|当前客户端IP
|
|参数名
|说明
|
|:-:
|:-:
|
|$
cloudEnv_uid
|用户uid,依赖uni-id|
|$
cloudEnv_now |服务器时间戳
|
|$
cloudEnv_clientIP |当前客户端IP
|
**jql条件语句的运算符**
...
...
@@ -321,8 +321,6 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
具体到这个正则
`/abc/.test(content)`
,类似于sql中的
`content like '%abc%'`
,即查询所有字段content包含abc的数据记录。
**云函数中node版本为8.9不支持正则断言**
**注意编写查询条件时,除test外,均为运算符左侧为数据库字段,右侧为常量**
#### 查询数组字段@querywitharr
...
...
@@ -391,7 +389,7 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
### JQL联表查询@lookup
> clientDB
将于2021年4月26日优化
联表查询策略,详情参考:[联表查询策略调整](https://ask.dcloud.net.cn/article/38966)
> clientDB
于2021年4月28日优化了
联表查询策略,详情参考:[联表查询策略调整](https://ask.dcloud.net.cn/article/38966)
`JQL`
提供了更简单的联表查询方案。不需要学习join、lookup等复杂方法。
...
...
@@ -601,6 +599,15 @@ db.collection('order')
不止js,
`<unicloud-db>`
组件也支持所有
`jql`
功能,包括联表查询。
在前端页面调试JQL联表查询且不过滤字段时会受权限影响,导致调试比较困难。可以通过HBuilderX提供的
[
JQL数据库管理
](
uniCloud/jql-runner.md
)
功能方便的查看联表查询时的虚拟表结构。
如上述查询可以直接在
`JQL文件`
中执行以下代码查看完整的虚拟表字段
```
js
db
.
collection
(
'
order,book
'
).
get
()
```
#### 手动指定使用的foreignKey@lookup-foreign-key
如果存在多个foreignKey且只希望部分生效,可以使用foreignKey来指定要使用的foreignKey
...
...
@@ -617,7 +624,6 @@ db.collection('comment,user')
**注意**
-
field参数字符串内没有冒号
-
联表查询时关联字段会被替换成被关联表的内容,因此不可在where内使用关联字段作为条件。举个例子,在上面的示例,
`where({book_id:"1"})`
,但是可以使用
`where({'book_id._id':"1"})`
-
上述示例中如果order表的
`book_id`
字段是数组形式存放多个book_id,也跟上述写法一致,clientDB会自动根据字段类型进行联表查询
-
各个表的_id字段会默认带上,即使没有指定返回
...
...
@@ -631,6 +637,8 @@ db.collection('comment,user')
**关联查询后的数据结构如下:**
> 通过HBuilderX提供的[JQL数据库管理](uniCloud/jql-runner.md)功能方便的查看联表查询时的虚拟表结构
主表某字段foreignKey指向副表时
```
js
...
...
docs/uniCloud/concepts/space.md
浏览文件 @
47cb9407
一个服务空间对应一整套独立的云开发资源,包括数据库、存储空间、云函数等资源。服务空间之间彼此隔离。
每个服务空间都有一个全局唯一的space ID。
未来会支持一个应用同时连接多个服务空间,届时需要在代码中声明space ID以告诉代码要连接哪个云服务空间。
每个服务空间都有一个全局唯一的space ID。
开发者可在 HBuilderX 中新建服务空间,如下:
...
...
docs/uniCloud/hellodb.md
浏览文件 @
47cb9407
...
...
@@ -103,6 +103,8 @@ js中敲下代码块`cdb`,即可快速输入上述代码。
**DBOptions参数说明**
> DBOptions仅腾讯云在云函数内可用
|字段 |类型 |必填 |描述 |平台差异说明 |
|:-: |:-: |:-: |:-: |:-: |
|spaceId|String |否 |同一账号下的,服务空间ID |仅腾讯云支持 |
...
...
@@ -293,7 +295,7 @@ uniCloud数据库提供了多种数据导入导出和备份方案。
"MgoIsSparse"
:
false
//
是否为稀疏索引,请参考
https://uniapp.dcloud.net.cn/uniCloud/db-index.md?id=sparse
}
}],
"schema"
:
{
"schema"
:
{
//
HBuilderX
3.0
.
0
以上版本schema不在此处,而是放在database目录下单独的`表名.schema.json`文件内
"bsonType"
:
"object"
,
"permission"
:
{
".read"
:
true
,
...
...
@@ -353,8 +355,6 @@ uniCloud数据库提供了多种数据导入导出和备份方案。
### 数据库回档备份和恢复@backup
**此功能暂时只有腾讯云支持**
uniCloud腾讯云版会在每天自动备份一次数据库,最多保留7天。这让开发者不再担心数据丢失。
**操作说明**
...
...
docs/uniCloud/jql-runner.md
浏览文件 @
47cb9407
## JQL
查询调试器
简介
## JQL
数据库管理
简介
为方便开发者调试查询语句,
`HBuilderX 3.1.5`
起内置了JQL查询调试器。用法如下
...
...
docs/uniCloud/price.md
浏览文件 @
47cb9407
...
...
@@ -22,7 +22,7 @@ uniCloud提供包月、按量计费两种计费方式(仅腾讯云),具体
|资源类目 |限制 |说明 |
|:-: |:-: |:-: |
|云函数并发限制 |1000个实例/服务空间 |实际普通项目很难达到这个并发数,阿里云可以设置单实例多并发单实例最多100,理论最大并发量1000
*
100=100000 (10万) |
|云函数并发限制 |1000个实例/服务空间 |实际普通项目很难达到这个并发数,阿里云可以设置单实例多并发单实例最多100,理论最大并发量1000
*
100=100000 (10万)
,关于单实例多并发请参考:
[
单实例多并发
](
uniCloud/cf-functions.md?id=concurrency
)
|
|每个服务空间的云函数数量 |48个 |实际项目中由于clientDB和单路由云函数,只会用到几个云函数,达不到限制数字。
[
详见
](
https://uniapp.dcloud.net.cn/uniCloud/faq?id=merge-functions
)
|
尤其注意阿里云的cdn确实是全免费的,这些免费资源可用于正常公司业务,阿里云不允许开发者使用这些免费的存储及CDN资源来开展图床类业务。
...
...
docs/uniCloud/quickstart.md
浏览文件 @
47cb9407
...
...
@@ -11,11 +11,11 @@
-
对于老的uni-app项目,也可以对项目点右键,菜单中选择“创建uniCloud云开发环境”
-
新建uni-app项目的模板中,有一个
`Hello uniCloud`
项目模板,演示了各种云函数的使用。
uniCloud云开发环境创建成功后,项目根目录下会有一个带有云图标的特殊目录,名为“
cloudfunctions
”。(即便是cli创建的项目,云函数目录也在项目的根目录下,而不是src下)
uniCloud云开发环境创建成功后,项目根目录下会有一个带有云图标的特殊目录,名为“
uniCloud
”。(即便是cli创建的项目,云函数目录也在项目的根目录下,而不是src下)
非uni-app项目也可以通过使用
[
云函数Url化
](
uniCloud/http.md
)
来享受云函数的带来的便利。
## 目录结构
## 目录结构
@structure
HBuilderX 3.0起目录结构做了调整如下:
...
...
@@ -94,7 +94,7 @@ HBuilderX 3.0之前版本目录结构如下:
-
如果未进行实名认证,会跳转至实名认证页面进行实名认证,等待实名认证审核之后可以开通服务空间。若腾讯云实名认证提示身份证下已创建过多账户,则需要在腾讯云官网注销不用的账户。
-
创建服务空间可能需要几十秒的时间,可以在web控制台查看是否创建完成。
-
一个应用,可以在
[
dev.dcloud.net.cn
](
https://dev.dcloud.net.cn
)
设置协作者(选择应用->设置项目成员),实现多人共同使用一个云服务空间。(需 HBuilderX 2.5.9+)。协作者可以在HBuilderX和web控制台中操作被授权的服务空间,除了删除服务空间,其他功能均可正常操作。
-
一个应用,可以在
[
dev.dcloud.net.cn
](
https://dev.dcloud.net.cn
)
设置协作者(选择应用->设置项目成员),实现多人共同使用一个云服务空间。(需 HBuilderX 2.5.9+)。协作者可以在HBuilderX和web控制台中操作被授权的服务空间,除了删除服务空间,其他功能均可正常操作。
授权其他用户访问的详细步骤请参考:
[
授权其他用户访问服务空间
](
https://uniapp.dcloud.net.cn/uniCloud/faq?id=collaborator
)
-
多个项目可以复用一个服务空间,比如一个应用的用户端和管理端,在HBuilderX里可以创建成2个项目,但2个项目的服务空间可以指向一个,或者干脆把其中一个项目的服务空间绑定到另一个项目上,
[
详见
](
https://ask.dcloud.net.cn/article/37949
)
## 创建云函数
...
...
@@ -187,7 +187,7 @@ exports.main = async (event, context) => {
**注意**
-
HBuilderX 3.0.0版本云函数目录有调整,请参考:
[
目录结构说明
](
https://uniapp.dcloud.io/uniCloud/quickstart?id=%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84
)
-
HBuilderX 3.0.0版本云函数目录有调整,请参考:
[
目录结构说明
](
uniCloud/quickstart.md?id=structure
)
### 上传并运行云函数@uploadandrun
...
...
@@ -362,7 +362,6 @@ const hour = getOffsetDate(8).getHours()
{
"otherParam": "***",
"clientInfo":{
CLIENT_SDK_VERSION: "1.0.0"
OS: "ios" // 系统类型 ios、android
PLATFORM: "h5" // 客户端类型 app-plus、h5、mp-weixin、mp-alipay等
}
...
...
@@ -460,9 +459,9 @@ H5前端js访问云函数,涉及跨域问题,导致前端js无法连接云
-
运行到H5端时,使用HBuilderX内置浏览器,可以忽略跨域问题(mac版需2.5.10+)。
-
发行到H5端时,需要在uniCloud后台操作,绑定安全域名(在部署云函数的服务空间配置部署h5的域名作为安全域名),否则会因为跨域问题而无法访问。(在
`cloudfunctions`
目录右键可打开uniCloud后台)
> 注意跨域配置需要带上端口信息。例如:前端页面运行于:www.xxx.com:5001,跨域配置内配置:www.xxx.com不会对此页面生效,需要配置为:
> 注意跨域配置需要带上端口信息。例如:前端页面运行于:www.xxx.com:5001,跨域配置内配置:www.xxx.com不会对此页面生效,需要配置为:
www.xxx.com:5001
**uniCloud后台
配置安全域名
:**
**uniCloud后台
跨域配置
:**
![](
https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-add-domain.png
)
...
...
docs/uniCloud/schema.md
浏览文件 @
47cb9407
...
...
@@ -192,7 +192,7 @@ uniCloud推出了`openDB`开源数据库规范,包括用户表、文章表、
注意:
-
timestamp是一串数字的时间戳,一般通过如下js获取
`var timestamp = new Date().getTime();`
。它的好处是屏蔽了时区差异。阿里云和腾讯云的云端时区是0,但在HBuilderX本地运行云函数时,如果是中国的电脑,时区则会变成8,导致显示错乱。所以推荐使用时间戳。但时间戳是一串记录毫秒的数字,不合适直接渲染到前端界面上。推荐的做法是在前端渲染时使用
[
`<uni-dateformat>`组件
](
https://ext.dcloud.net.cn/plugin?id=3279
)
。
-
时间戳
和地理位置在web控制台的数据库管理界面上无法直接在引号里录入值,需参考
[
文档
](
uniCloud/quickstart?id=editdb
)
-
日期
和地理位置在web控制台的数据库管理界面上无法直接在引号里录入值,需参考
[
文档
](
uniCloud/quickstart?id=editdb
)
-
double类型慎重,由于js不能精准处理浮点运算,0.1+0.2=0.30000000000000004。所以涉及金额时,建议使用int而不是double,以分为单位而不是以元为单位存储。比如微信支付默认就是以分为单位。如果使用
[
uniPay
](
uniCloud/unipay
)
处理支付的话,它的默认单位也是分。
...
...
@@ -1013,7 +1013,7 @@ permission的字段级控制,包括读写两种权限,分别称为:read、
**注意**
-
`auth.xxx`
均由uni-id提供,依赖于
[
uni-id公共模块
](
uniCloud/uni-id.md
)
-
`doc.xxx`
表示将要查询/修改/删除的每条数据,如果将要访问的数据不满足permission规则将会拒绝执行
-
`doc.xxx`
表示将要查询/修改/删除的每条数据
(注意并不包括新增数据,新增数据应通过值域校验进行验证)
,如果将要访问的数据不满足permission规则将会拒绝执行
-
`uni-id`
的角色和权限,也即auth.role和auth.permission是不一样的概念。注意阅读
[
uni-id 角色权限
](
/uniCloud/uni-id?id=rbac
)
-
如果想支持使用多个
`action`
的用法,可以通过
`"'actionRequired' in action"`
的形式配置权限,限制客户端使用的action内必须包含名为
`actionRequired`
的action
-
doc是由客户端条件里面提取的变量,可以理解为将要访问的数据,因此create权限内不可使用doc变量,建议使用forceDefaultValue或自定义校验函数实现插入数据的校验。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录