Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
c0c4dbc2
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3000
Star
102
Fork
757
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
84
列表
看板
标记
里程碑
合并请求
58
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
84
Issue
84
列表
看板
标记
里程碑
合并请求
58
合并请求
58
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c0c4dbc2
编写于
12月 09, 2022
作者:
W
wanganxp
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新数据库触发器引流
上级
2db78115
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
24 deletion
+30
-24
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+13
-15
docs/uniCloud/clientdb.md
docs/uniCloud/clientdb.md
+7
-6
docs/uniCloud/jql.md
docs/uniCloud/jql.md
+10
-3
未找到文件。
docs/uniCloud/cf-functions.md
浏览文件 @
c0c4dbc2
...
...
@@ -31,7 +31,7 @@
-
云函数:通过传统json接口方式和客户端通信,客户端使用
`uniCloud.callfunction("")`
调用云函数
-
云对象:是通过前端导入对象来操作的,客户端使用
`uniCloud.importObject("")`
导入云对象。详见
[
云对象
](
/uniCloud/cloud-obj
)
-
公共模块:用于不同的云函数/云对象,抽取和共享相同代码,详见
[
公共模块文档
](
/uniCloud/cf-functions?id=公共模块
)
-
action云函数
:为了弥补clientDB客户端直接操作数据库的局限而设计的,详见
[
clientDB action文档
](
/uniCloud/clientdb?id=action
)
-
action云函数
(不推荐使用):为了弥补clientDB客户端直接操作数据库的局限而设计的,详见
[
clientDB action文档
](
/uniCloud/clientdb?id=action
)
。从HBuilderX 3.6.11开始,推荐使用
[
数据库触发器
](
jql-schema-ext.md
)
替代action云函数。
-
uniCloud扩展库:为了裁剪和控制云函数体积而设计的,一些不太常用的功能比如Redis,独立为可选扩展库,避免增大每个云函数的体积,详见
[
uniCloud扩展库
](
/uniCloud/cf-functions?id=扩展库
)
HBuilderX中uniCloud项目的云函数均在项目的
`uniCloud/cloudfunctions`
目录下,目录结构如下:
...
...
@@ -43,7 +43,7 @@ HBuilderX中uniCloud项目的云函数均在项目的`uniCloud/cloudfunctions`
| | └──hello-common 云函数公用模块
| | │──index.js 公用模块代码
| | └──package.json 公用模块package.json
| │───uni-clientDB-actions
| │───uni-clientDB-actions
(推荐用数据库触发器替代action云函数)
| │ └──new_action.js clientDB action代码
<a
target=
"_blank"
href=
"https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action"
>
详情
</a>
| │───function-name 云函数目录
| │ │──index.js 云函数代码
...
...
@@ -93,14 +93,14 @@ db.collection('list').get()
如果客户端使用uni-app开发,且向uniCloud服务空间的请求主要是为了操作云数据库(无论增删改查),那么推荐使用clientDB方式,由uni-app客户端直接操作云数据库。
如果操作数据库的同时,还需要同时执行一些云
函数,可以使用clientDB的
action云函数。
如果操作数据库的同时,还需要同时执行一些云
端逻辑:HBuilderX 3.6.11以前使用action云函数;从HBuilderX 3.6.11开始,推荐使用
[
数据库触发器
](
jql-schema-ext.md
)
替代
action云函数。
-
clientDB不适用的情况:
1.
请求不操作云数据库,比如向外部web系统发请求、操作redis、删除云文件等;
2.
操作的云数据库请求不希望暴露在前端;
3.
数据库表和字段数量多而接口数量少。给每个数据配置权限的工作量超过了控制少数接口权限的工作量;
4.
权限体系
较复杂,除了用户和管理员外还有较多其他权限条件或动态权限。此时在schema和action
中编写代码的复杂度超过了写接口。
4.
权限体系
非常复杂,除了用户和管理员外还有较多其他权限条件或动态权限。此时在schema.json/schema.ext.js
中编写代码的复杂度超过了写接口。
### 云对象方式
...
...
@@ -258,7 +258,7 @@ HBuilderX内使用代码块`returnu`可以快速输入以下代码(`HBuilderX
```
js
return
{
errSubject
:
''
,
// HBuilderX 3.6.10新增
errSubject
:
''
,
// HBuilderX 3.6.10新增
errCode
:
0
,
errMsg
:
''
}
...
...
@@ -309,8 +309,8 @@ return {
云函数中支持访问本服务空间下的、或经授权的其他服务空间下的,数据库。
-
使用 MongoDB 语法操作数据库,另见
[
文档
](
uniCloud/cf-database.md
)
-
使用 JQL 语法操作数据库,另见
[
文档
](
uniCloud/jql-cloud.md
)
-
使用 MongoDB 语法操作数据库,另见
[
文档
](
uniCloud/cf-database.md
)
## 访问其他HTTP服务@httpclient
...
...
@@ -572,13 +572,13 @@ uniCloud的api中,有些api对应的实现,其代码体积较大,且这些
## 公共模块@common
云函数支持公共模块。多个云函数的共享部分,可以抽离为公共模块,然后被多个云函数引用。由于篇幅较长,
[
详见
](
uniCloud/cf-common
)
云函数支持公共模块。多个云函数
/云对象
的共享部分,可以抽离为公共模块,然后被多个云函数引用。由于篇幅较长,
[
详见
](
uniCloud/cf-common
)
## 使用npm
云函数的运行环境是
`Node.js`
,因此我们可以使用
`npm`
安装第三方依赖。
注意:阿里云目前仅支持全量上传云函数(整个
node_modules
文件夹全部上传,会在上传前自动在本地安装依赖,不会直接使用云函数目录下的node_modules),因此提醒开发者精简依赖,否则可能会每次上传时间很慢,影响开发体验。并且太大的npm库影响云函数的运行性能。
注意:阿里云目前仅支持全量上传云函数(整个
`node_modules`
文件夹全部上传,会在上传前自动在本地安装依赖,不会直接使用云函数目录下的node_modules),因此提醒开发者精简依赖,否则可能会每次上传时间很慢,影响开发体验。并且太大的npm库影响云函数的运行性能。
腾讯云会在上传云函数后自动安装需要的npm依赖。
...
...
@@ -738,7 +738,7 @@ myCloud.uploadFile()
## serverless环境说明@runtime
serverless是动态分
别
计算资源的,由此会引发的出一批特有概念:冷启动、实例、并发请求、无状态、伪全局变量。
serverless是动态分
配
计算资源的,由此会引发的出一批特有概念:冷启动、实例、并发请求、无状态、伪全局变量。
### 云函数冷启动、热启动@launchtype
...
...
@@ -772,7 +772,7 @@ serverless是动态分别计算资源的,由此会引发的出一批特有概
1.
使用clientDB可以减少遇到冷启动问题的概率
2.
非高频访问的云函数,合并到高频云函数中。也有的开发者使用单路由方式编写云函数,即在一个云函数中通过路由处理实现了整个应用的所有后台逻辑。参考
[
插件
](
https://ext.dcloud.net.cn/search?q=%E8%B7%AF%E7%94%B1&cat1=7&orderBy=UpdatedDate
)
。
但使用这种方式需注意平衡,如果业务代码太多,每次云函数请求产生的内存消耗也会不少。
3.
非高频访问的云函数,可以通过定时任务持续运行它(注意
腾讯云可以使用这个方式完全避开冷启动,而阿里云
的定时任务最短周期大于资源回收周期)
3.
非高频访问的云函数,可以通过定时任务持续运行它(注意
阿里云公测版
的定时任务最短周期大于资源回收周期)
4.
阿里云支持配置云函数的单实例多并发,请参考:
[
单实例多并发
](
cf-functions.md?id=concurrency
)
5.
腾讯云付费进行实例预留
...
...
@@ -1069,9 +1069,7 @@ serverless默认是没有固定的服务器IP的,因为有很多服务器资
但一些三方系统,要求配置固定ip白名单,比如微信公众号的js sdk,此时只能提供固定ip地址。
目前腾讯云的收费版,提供了云函数的固定出口ip
在uniCloud
[
Web控制台
](
https://unicloud.dcloud.net.cn
)
,创建付费的腾讯云服务空间,选择一个云函数,在云函数的详情界面可以开启固定出口ip。开启后界面上会显示可用的固定ip。拿着这个ip去需要固定ip的界面(如微信公众号管理界面)配置即可。
腾讯云的收费版,提供了云函数的固定出口ip,在uniCloud
[
Web控制台
](
https://unicloud.dcloud.net.cn
)
,创建付费的腾讯云服务空间,选择一个云函数,在云函数的详情界面可以开启固定出口ip。开启后界面上会显示可用的固定ip。拿着这个ip去需要固定ip的界面(如微信公众号管理界面)配置即可。
**注意**
...
...
@@ -1100,7 +1098,7 @@ uniCloud.httpProxyForEip ,其原理是通过代理请求获得固定出口IP
47.92.68.159
```
**代理服务器IP列表(
商业
版)**
**代理服务器IP列表(
正式
版)**
```
47.92.132.2
...
...
@@ -1269,7 +1267,7 @@ package.json是一个标准json文件,不可带注释。下面是一个package
**使用腾讯云Nodejs12版本时,务必仔细阅读此文档:[keepRunningAfterReturn](#keep-running)**
#### triggers@triggers
####
定时任务
triggers@triggers
阿里云定时触发的cron表达式不支持代表年的第七位,但是在package.json内配置时仍需将第七位设置为
*
。
...
...
docs/uniCloud/clientdb.md
浏览文件 @
c0c4dbc2
JQL语法相关文档已移至:
[
JQL语法
](
uniCloud/
jql.md
)
JQL语法相关文档已移至:
[
JQL语法
](
jql.md
)
## clientDB简介
...
...
@@ -16,7 +16,8 @@ JQL语法相关文档已移至:[JQL语法](uniCloud/jql.md)
在
`DB Schema`
中,配置数据操作的权限和字段值域校验规则,阻止前端不恰当的数据读写。详见:
[
DB Schema
](
https://uniapp.dcloud.net.cn/uniCloud/schema
)
如果需要数据库操作之前或之后,云端执行关联逻辑(比如获取文章详情后,文章阅读量+1),
`clientDB`
提供了action云函数机制。在HBuilderX项目的
`cloudfunctions/uni-clientDB-actions`
目录编写上传js,参考:
[
action
](
uniCloud/jql?id=action
)
如果需要数据库操作之前或之后,云端执行关联逻辑(比如获取文章详情后,文章阅读量+1),
`clientDB`
提供了
[
数据库触发器
](
jql-schema-ext.md
)
(从HBuilderX 3.6.11开始)。
在不支持数据库触发器的低版本,使用
[
action云函数
](
jql.md#action
)
**注意**
...
...
@@ -105,12 +106,12 @@ db.collection('list')
// 获取db引用
const
db
=
uniCloud
.
database
()
//代码块为cdb
db
.
collection
(
'
list
'
)
.
where
(
'
name=="hello-uni-app"
'
)
.
where
(
'
name=="hello-uni-app"
'
)
.
get
()
.
then
((
res
)
=>
{
.
then
((
res
)
=>
{
// res 为数据库查询结果
}).
catch
((
err
)
=>
{
console
.
log
(
err
.
code
);
// 打印错误码
}).
catch
((
err
)
=>
{
console
.
log
(
err
.
code
);
// 打印错误码
console
.
log
(
err
.
message
);
// 打印错误内容
})
```
...
...
docs/uniCloud/jql.md
浏览文件 @
c0c4dbc2
...
...
@@ -81,7 +81,7 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
这些问题竖起一堵墙,让后端开发难度加大,成为一个“专业领域”。但其实这堵墙是完全可以推倒的。
`jql`
将解决这些问题,让js工程师没有难操作的数据。
`jql`
将解决这些问题,让js工程师没有难操作的数据
库
。
具体看以下示例
...
...
@@ -122,7 +122,8 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
-
不会校验任何权限,相当于以数据库管理员的身份执行
-
即使是admin不能读写的password类型数据也可以读写
-
不可以执行action
-
不会触发数据库触发器
-
不可以执行action云函数
**客户端clientDB:**
...
...
@@ -132,7 +133,7 @@ sql写法,对js工程师而言有学习成本,而且无法处理非关系型
**云函数JQL:**
-
同clientDB,但是password类型的数据可以配置权限,默认权限是false,可以被admin用户操作。
-
可以指定当前执行数据库操作的用户身份。
-
可以
通过setUser
指定当前执行数据库操作的用户身份。
## JQL的限制@limit
...
...
@@ -3290,6 +3291,10 @@ db.collection('goods').where('name == "n1"').get()
## action@action
**注意:**
> 从HBuilderX 3.6.11开始,推荐使用[数据库触发器](jql-schema-ext.md)替代action云函数。以下内容仅为向下兼容保留
action的作用是在执行前端发起的数据库操作时,额外触发一段云函数逻辑。它是一个可选模块。action是运行于云函数内的,可以使用云函数内的所有接口。
当一个前端操作数据库的方式不能完全满足需求,仍然同时需要在云端再执行一些云函数时,就在前端发起数据库操作时,通过
`db.action("someactionname")`
方式要求云端同时执行这个叫someactionname的action。还可以在权限规则内指定某些操作必须使用指定的action,比如
`"action in ['action-a','action-b']"`
,来达到更灵活的权限控制。
...
...
@@ -3432,6 +3437,8 @@ module.exports = {
}
```
通过上述步骤建立起关联关系后,可正常在数据库触发器或action云函数中使用公共模块。
**注意**
-
尽量不要依赖体积过大的公共模块,会延长冷启动时间
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录