Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
20e9e6bb
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3593
Star
108
Fork
920
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
120
列表
看板
标记
里程碑
合并请求
108
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
120
Issue
120
列表
看板
标记
里程碑
合并请求
108
合并请求
108
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
20e9e6bb
编写于
8月 23, 2022
作者:
雪洛
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'next'
上级
40a49515
1642f882
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
304 addition
and
11 deletion
+304
-11
docs/uniCloud/cf-callfunction.md
docs/uniCloud/cf-callfunction.md
+1
-0
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+199
-2
docs/uniCloud/client-sdk.md
docs/uniCloud/client-sdk.md
+56
-6
docs/uniCloud/cloud-obj.md
docs/uniCloud/cloud-obj.md
+19
-0
docs/uniCloud/db-performance.md
docs/uniCloud/db-performance.md
+1
-1
docs/uniCloud/hellodb.md
docs/uniCloud/hellodb.md
+1
-1
docs/uniCloud/price.md
docs/uniCloud/price.md
+1
-1
docs/uniCloud/rundebug.md
docs/uniCloud/rundebug.md
+26
-0
未找到文件。
docs/uniCloud/cf-callfunction.md
浏览文件 @
20e9e6bb
...
...
@@ -128,6 +128,7 @@ context对象的属性清单如下:
|CLIENTIP |string |客户端IP。如果调用来源是其他服务器,会返回调用方的ip |
|CLIENTUA |string |客户端userAgent。注意非本地运行环境下客户端getSystemInfoSync也会获取ua参数并上传给云函数,但是云函数会从http请求头里面获取ua而不是clientInfo里面的ua |
|uniIdToken |string |客户端uni-id token字符串,新增于HBuilderX 3.5.1。 |
|requestId |string |当前请求id,新增于HBuilderX 3.5.5。 |
除了上述属性,如果是uni-app客户端通过callfunction访问云函数,那么context还会追加一批客户端信息。
-
HBuilderX 3.4.9前,context 添加了一批大写属性,如APPID、OS。
...
...
docs/uniCloud/cf-functions.md
浏览文件 @
20e9e6bb
...
...
@@ -286,13 +286,17 @@ errMsg用于存放具体错误信息,包括展示给开发者、终端用户
|uniCloud.deleteFile() |云函数删除云存储的文件
[
详情
](
uniCloud/storage?id=clouddeletefile
)
|
|uniCloud.getTempFileURL() |获取云存储文件的临时路径
[
详情
](
uniCloud/storage?id=cloudgettempfileurl
)
|
|uniCloud.customAuth() |使用云厂商自定义登录,仅腾讯云支持
[
详情
](
uniCloud/authentication.md?id=cloud-custom-auth
)
|
|uniCloud.callFunction() |云函数/云对象中调用另一个云函数
[
见下
](
?id=
callbyfunction
)
|
|uniCloud.callFunction() |云函数/云对象中调用另一个云函数
[
见下
](
#
callbyfunction
)
|
|uniCloud.importObject() |云函数/云对象中调用另一个云对象
[
详情
](
cloud-obj.md?id=call-by-cloud
)
|
|uniCloud.httpclient |云函数中通过http访问其他系统
[
见下
](
uniCloud/cf-functions?id=
httpclient
)
|
|uniCloud.httpclient |云函数中通过http访问其他系统
[
见下
](
#
httpclient
)
|
|uniCloud.sendSms() |发送短信,需添加扩展库
[
详见
](
uniCloud/send-sms.md
)
|
|uniCloud.getPhoneNumber() |获取一键登录手机号,需添加扩展库
[
详见
](
uniCloud/univerify.md?id=cloud
)
|
|uniCloud.init() |获取指定服务空间的uniCloud实例
[
详见
](
uniCloud/concepts/space.md?id=multi-space
)
|
|uniCloud.logger |云函数中打印日志到
[
uniCloud web控制台
](
https://unicloud.dcloud.net.cn/
)
的日志系统(非HBuilderX控制台)
[
详情
](
rundebug.md?id=uniCloudlogger
)
|
|uniCloud.httpProxyForEip |使用云厂商代理访问http服务(阿里云固定IP方案),仅阿里云云端环境支持
[
详见
](
#http-proxy-for-eip
)
,新增于
`HBuilderX 3.5.5`
|
|uniCloud.getRequestList |获取当前云函数实例内正在处理的请求Id列表
[
详见
](
#get-request-list
)
,新增于
`HBuilderX 3.5.5`
|
|uniCloud.getClientInfos |获取当前云函数实例内正在处理的请求对应的客户端信息列表
[
详见
](
#get-client-infos
)
,新增于
`HBuilderX 3.5.5`
|
|uniCloud.getCloudInfos |获取当前云函数实例内正在处理的请求对应的云端信息列表
[
详见
](
#get-cloud-infos
)
,新增于
`HBuilderX 3.5.5`
|
## 错误对象@uni-cloud-error
...
...
@@ -427,6 +431,88 @@ exports.main = async (event, context) => {
```
## 其他API
### 获取请求id列表@get-request-list
非单实例多并发场景下列表长度为1,仅有的一个requestId表示当前请求的requestId。单实例多并发场景下会返回正在处理的所有请求的requestId列表。如需获取当前请求的requestId参考:
[
云函数context
](
cf-callfunction.md#context
)
、
[
云对象获取当前请求的requestId
](
cloud-obj.md#get-request-id
)
**示例**
```
js
uniCloud
.
getRequestList
()
// ['3228166e-3c17-4d58-9707-xxxxxxxx']
```
### 获取客户端信息列表#get-client-infos
非单实例多并发场景下列表长度为1,仅有的一个cloudInfo表示当前请求的客户端信息。单实例多并发场景下返回正在处理的所有请求的客户端信息列表。
```
js
const
clientInfos
=
uniCloud
.
getClientInfos
()
clientInfos
=
[{
appId
:
'
__UNI_xxxxx
'
,
requestId
:
'
3228166e-3c17-4d58-9707-xxxxxxxx
'
// ...
}]
```
**返回值**
getClientInfos返回的信息,是在客户端的
[
uni.getSystemInfo
](
/api/system/info.md#getsysteminfo
)
的基础之上,增加了一些额外的信息。
除了
`getSystemInfo`
返回字段外,还包含以下信息
|属性名 |类型 |说明 |
|-- |-- |-- |
|clientIP |string |客户端ip |
|userAgent|string |客户端ua,注意非本地运行环境下客户端getSystemInfoSync也会获取ua参数并上传给云对象,但是云对象会从http请求头里面获取ua而不是clientInfo里面的ua|
|source |string |调用来源,返回值见下。 |
|scene |string |场景值。客户端
[
uni.getLaunchOptionsSync
](
/api/plugins/getLaunchOptionsSync.md#getlaunchoptionssync
)
返回的scene参数, |
|requestId|string |请求Id,可以使用此字段筛选出当前请求的客户端信息 |
云函数调用来源,它的值域为:
|取值 |说明 |
|-- |-- |
|client |uni-app客户端导入云对象调用 |
|function |由其他云函数或云对象调用 |
|http |云对象URL化后通过http访问调用|
|timing |定时任务调用云对象 |
**注意事项**
-
客户端上报的信息在理论上存在被篡改可能,实际业务中应验证前端传来的数据的合法性
-
除了clientIP外,其他客户端信息只有使用uni-app客户端以callFunction或者importObject方式访问云函数或云对象时才有
-
云对象与云函数内获取客户端platform稍有不同,云函数未拉齐vue2、vue3版本app平台的platform值,vue2为
`app-plus`
,vue3为
`app`
。云对象无论客户端是vue2还是vue3,在app平台获取的platform均为
`app`
。这一点在使用uni-id时需要特别注意,详情见:
[
uni-id文档 preferedAppPlatform
](
uniCloud/uni-id.md?id=prefered-app-platform
)
### 获取云端信息@get-cloud-infos
非单实例多并发场景下列表长度为1,仅有的一个cloudInfo表示当前请求的云端信息。单实例多并发场景下返回正在处理的所有请求的云端信息列表。
**示例**
```
js
const
cloudInfos
=
uniCloud
.
getCloudInfos
()
cloudInfos
=
[{
provider
:
'
aliyun
'
,
spaceId
:
'
xxxxx
'
,
functionName
:
'
xxx
'
,
functionType
:
'
xxxx
'
,
requestId
:
'
3228166e-3c17-4d58-9707-xxxxxxxx
'
}]
```
**返回值**
|参数名 |类型 |必备 |说明 |
|-- |-- |-- |-- |
|provider |string |是 |服务空间供应商,阿里云为:
`aliyun`
,腾讯云为:
`tencent`
|
|spaceId |string |是 |服务空间Id |
|functionName |string |是 |云对象名称,新增于 |
|functionType |string |是 |云对象此值固定为
`cloudobject`
,新增于 |
|requestId |string |是 |请求Id,可以使用此字段筛选出当前请求的云端信息 |
## 扩展库@extension
uniCloud的api中,有些api对应的实现,其代码体积较大,且这些功能并不是每一个云函数都会使用。为了方便开发者控制云函数的体积,设计了
`uniCloud扩展库`
的概念。
...
...
@@ -771,6 +857,8 @@ exports.main = async function() {
### 固定出口IP@eip
#### 腾讯云@tencent-eip
serverless默认是没有固定的服务器IP的,因为有很多服务器资源在后台供随时调用,每次调用到哪个服务器、哪个ip都不固定。
但一些三方系统,要求配置固定ip白名单,比如微信公众号的js sdk,此时只能提供固定ip地址。
...
...
@@ -792,6 +880,115 @@ serverless默认是没有固定的服务器IP的,因为有很多服务器资
建议已开通redis的服务空间先将云函数关联redis扩展再开通固定出口IP,
**2022年7月20日起新上传的云函数会默认开启vpc功能,如需旧云函数和新云函数保持一致可以把旧云函数关联redis扩展后上传一次,注意这样操作会改变旧云函数的固定出口IP**
#### 阿里云@aliyun-eip
> 新增于 HBuilderX 3.5.5,仅阿里云支持
uniCloud.httpProxyForEip ,其原理是通过代理请求获得固定出口IP的能力。IP为轮转不固定,因此三方服务要求使用白名单时开发者需要将代理服务器可能的IP均加入到白名单中,见下方代理服务器列表。此外对于代理的域名有限制,当前仅持
`weixin.qq.com`
泛域名。若开发者有其他域名代理需求,发送邮件到service@dcloud.io申请。
代理服务器IP列表
```
39.100.3.155
47.92.39.39
47.92.67.205
47.92.25.106
47.92.68.159
```
如需在获取微信公众号access_token场景使用,请将上述ip配置到
`微信公众平台 -> 基本配置 -> IP白名单`
内,相关链接:
[
微信公众平台
](
https://mp.weixin.qq.com/
)
##### 发送Get请求@http-proxy-get
**用法**
```
js
uniCloud
.
httpProxyForEip
.
get
(
url
:
String
,
params
?:
Object
)
```
**示例**
```
js
await
uniCloud
.
httpProxyForEip
.
get
(
'
https://api.weixin.qq.com/cgi-bin/token
'
,
{
grant_type
:
'
client_credential
'
,
appid
:
'
xxxx
'
,
secret
:
'
xxxx
'
}
)
```
##### 发送POST请求携带表单数据@http-proxy-post-form
注意,此接口以
`application/x-www-form-urlencoded`
格式发送数据而不是
`multipart/form-data`
**用法**
```
js
uniCloud
.
httpProxyForEip
.
postForm
(
url
:
String
,
data
?:
Object
,
headers
?:
Object
)
```
**示例**
```
js
uniCloud
.
httpProxyForEip
.
postForm
(
'
https://www.example.com/search
'
,
{
q
:
'
nodejs
'
,
cat
:
'
1001
'
}
)
```
##### 发送POST请求携带JSON数据@http-proxy-post-json
以
`application/json`
格式post数据
**用法**
```
js
uniCloud
.
httpProxyForEip
.
postJson
(
url
:
String
,
json
?:
Object
,
headers
?:
Object
)
```
**示例**
```
js
uniCloud
.
httpProxyForEip
.
postJson
(
'
https://www.example.com/search
'
,
{
q
:
'
nodejs
'
,
cat
:
'
1001
'
}
)
```
##### POST通用数据@http-proxy-post
**用法**
```
js
uniCloud
.
httpProxyForEip
.
post
(
url
:
String
,
text
?:
String
,
headers
?:
Object
)
```
**示例**
```
js
uniCloud
.
httpProxyForEip
.
post
(
'
https://www.example.com/search
'
,
'
abcdefg
'
,
{
"
Content-Type
"
:
"
text/plain
"
}
)
```
**注意**
-
不支持发送multipart格式的内容
-
代理请求超时时间为5秒
-
上述接口支持本地运行
### 单实例多并发@concurrency
> 仅阿里云支持
...
...
docs/uniCloud/client-sdk.md
浏览文件 @
20e9e6bb
...
...
@@ -19,6 +19,7 @@ uniCloud分为客户端和云端两部分,有些接口名称相同,参数也
|uniCloud.init() |同时使用多个服务空间时初始化额外服务空间
[
详情
](
init.md
)
|
|uniCloud.addInterceptor() |新增拦截器
[
详情
](
#add-interceptor
)
|
|uniCloud.removeInterceptor() |移除拦截器
[
详情
](
#remove-interceptor
)
|
|uniCloud.interceptObject() |拦截云对象请求
[
详情
](
#intercept-object
)
|
|uniCloud.onResponse() |监听服务端(云函数、云对象、clientDB)响应
[
详情
](
#on-response
)
|
|uniCloud.offResponse() |移除监听服务端(云函数、云对象、clientDB)响应
[
详情
](
#off-response
)
|
|uniCloud.onNeedLogin() |监听需要登录事件
[
详情
](
#on-need-login
)
|
...
...
@@ -71,7 +72,7 @@ console.log(uniCloud.getCurrentUserInfo().role.indexOf('admin')>-1); // 如果
> 新增于HBuilderX 3.1.20
接口形式:
`uniCloud.addInterceptor(String apiName, Object interceptor
Map
)`
接口形式:
`uniCloud.addInterceptor(String apiName, Object interceptor)`
**平台兼容性**
...
...
@@ -85,9 +86,9 @@ console.log(uniCloud.getCurrentUserInfo().role.indexOf('admin')>-1); // 如果
| 字段 | 类型 | 必填| 说明 |
| --- | --- | --- | --- |
| apiName | string| 是 | 要拦截的Api名称,可选值:callFunction、database、uploadFile |
| interceptor
Map
| object| 是 | 要添加的拦截器 |
| interceptor| object| 是 | 要添加的拦截器 |
**interceptor
Map
参数说明**
**interceptor参数说明**
|参数名 |类型 |必填 |默认值 |说明 |平台差异说明 |
|--- |--- |--- |--- |--- |--- |
...
...
@@ -120,16 +121,16 @@ uniCloud.addInterceptor('callFunction', {
> 新增于HBuilderX 3.1.20
接口形式:
`uniCloud.removeInterceptor(String apiName, Object interceptor
Map
)`
接口形式:
`uniCloud.removeInterceptor(String apiName, Object interceptor)`
**入参说明**
| 字段 | 类型 | 必填| 说明 |
| --- | --- | --- | --- |
| apiName | string| 是 | 要拦截的Api名称,可选值:callFunction、database、uploadFile |
| interceptor
Map
| object| 是 | 要移除的拦截器,选填,不传递此参数时移除此Api所有拦截器 |
| interceptor| object| 是 | 要移除的拦截器,选填,不传递此参数时移除此Api所有拦截器 |
**interceptor
Map
参数说明**
**interceptor参数说明**
|参数名 |类型 |必填 |默认值 |说明 |平台差异说明 |
|--- |--- |--- |--- |--- |--- |
...
...
@@ -167,6 +168,55 @@ uniCloud.removeInterceptor('callFunction', {
})
```
### 拦截云对象请求intercept-object
> 新增于HBuilderX 3.5.5
接口形式:
`uniCloud.interceptObject(Object interceptor)`
**interceptor参数说明**
|参数名 |类型 |必填 |默认值 |说明 |平台差异说明 |
|--- |--- |--- |--- |--- |--- |
|invoke |Function |否 | |拦截前触发 | |
|success |Function |否 | |成功回调拦截 | |
|fail |Function |否 | |失败回调拦截 | |
|complete |Function |否 | |完成回调拦截 | |
**invoke**
拦截器内将会收到以下形式的参数
```
js
{
objectName
:
""
,
// 云对象名称
methodName
:
""
,
// 云对象的方法名称
params
:
[]
// 参数列表
}
```
**success**
拦截器内将会收到以下形式的参数
```
js
{
objectName
:
""
,
// 云对象名称
methodName
:
""
,
// 云对象的方法名称
params
:
[],
// 参数列表
result
:
{}
// 云对象响应结果
}
```
**fail**
拦截器内将会收到以下形式的参数
```
js
{
objectName
:
""
,
// 云对象名称
methodName
:
""
,
// 云对象的方法名称
params
:
[],
// 参数列表
error
:
new
Error
()
// 错误对象
}
```
**complete**
拦截器内将会收到success或fail拦截器相同的参数,具体以云函数是否执行成功为准
### 监听云端响应@on-response
> 新增于HBuilderX 3.4.13
...
...
docs/uniCloud/cloud-obj.md
浏览文件 @
20e9e6bb
...
...
@@ -385,6 +385,25 @@ module.exports = {
}
```
### 获取当前请求id@get-request-id
**接口形式**
`this.getUniCloudRequestId()`
**示例**
```
js
module
.
exports
=
{
_after
:
function
(
error
,
result
)
{
if
(
error
)
{
const
requestId
=
this
.
getUniCloudRequestId
()
// log(requestId, error) 出错时记录日志,log方法需自行实现
}
}
}
```
### 获取url化时的http信息@get-http-info
> 新增于HBuilderX 3.5.2
...
...
docs/uniCloud/db-performance.md
浏览文件 @
20e9e6bb
...
...
@@ -2,7 +2,7 @@
开发者应经常查阅自己的慢查询,修复问题,保证业务系统的健康稳定。
在数据库语句执行超过一定时间(
**腾讯云
为5秒,阿里云为3秒**
)仍不能返回结果后,阿里云甚至会报错
`operation exceeded time limit`
。
**如果对数据库超时时间有更高的需求,建议使用腾讯云。**
在数据库语句执行超过一定时间(
**腾讯云
、阿里云均为5秒**
)仍不能返回结果后,数据库请求会报超时错误。
这里介绍如何进行查询优化以避免此类问题。
...
...
docs/uniCloud/hellodb.md
浏览文件 @
20e9e6bb
...
...
@@ -509,7 +509,7 @@ new db.Geo.MultiPolygon([
|腾讯云 |阿里云 |
|-- |-- |
|5秒 |
3
秒 |
|5秒 |
5
秒 |
如果是大数据批处理,可以参考云函数递归调用,连续执行多个云函数处理一个任务
[
详情查看
](
uniCloud/cf-functions.md?id=recurrence
)
...
...
docs/uniCloud/price.md
浏览文件 @
20e9e6bb
...
...
@@ -27,7 +27,7 @@ uniCloud提供包月、按量计费两种计费方式(仅腾讯云),具体
|云函数定时触发最小间隔 |1小时 |- |
|云存储容量 |10GB |- |
|云数据库容量 |100GB |- |
|单次数据库执行时长限制 |
3
秒 |
**不可申请调整**
|
|单次数据库执行时长限制 |
5
秒 |
**不可申请调整**
|
尤其注意阿里云的cdn确实是全免费的,这些免费资源可用于正常公司业务,阿里云不允许开发者使用这些免费的存储及CDN资源来开展图床类业务。
...
...
docs/uniCloud/rundebug.md
浏览文件 @
20e9e6bb
...
...
@@ -289,6 +289,32 @@ const hour = getOffsetDate(8).getHours()
}
```
## 运行云对象时传配置运行测试参数@run-obj-param
> 新增于HBuilderX 3.5.5
右键点击云对象时选择
`运行-本地云对象`
或
`调试运行-本地云对象`
时,会自动创建运行参数文件
`${objName}.param.js`
,可在此文件内以以下格式配置参数,配置完毕后再次运行即可。
其中
`const clientInfo = {xxx}`
为模拟客户端信息。完整clientInfo列表请参考:
[
getClientInfo
](
cloud-obj.md#get-client-info
)
`login('xxx', 'xxx')`
用于指定调用的方法名和参数。
```
js
const
clientInfo
=
{
// 模拟clientInfo
uniPlatform
:
'
web
'
,
source
:
'
client
'
,
// 调用来源,不传时默认为 client
clientIP
:
'
127.0.0.1
'
,
// 客户端ip,不传时默认为 127.0.0.1
userAgent
:
'
xx MicroMessenger/xxx
'
// 客户端ua,不传时默认为 HBuilderX
uniIdToken
:
'
xxx
'
,
}
login
(
'
name-demo
'
,
'
password-demo
'
)
// 调用login方法传入参数'name-demo'和'password-demo'
```
**注意**
-
此文件并非可执行的js文件,仅用来配置参数,因此不可在文件内定义变量并使用
-
如果存在多个方法、参数配置运行时会使用第一个
## 断点调试云函数
> HBuilderX 3.2.10起,本地运行云函数及客户端连接本地云函数支持断点调试
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录