Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-unicloud-zh
提交
477e4096
U
unidocs-unicloud-zh
项目概览
DCloud
/
unidocs-unicloud-zh
通知
83
Star
1
Fork
19
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
7
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-unicloud-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
7
合并请求
7
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
477e4096
编写于
8月 16, 2024
作者:
crlfe
😲
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update: cf & co doc
上级
2721cbee
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
377 addition
and
374 deletion
+377
-374
docs/cf-callfunction.md
docs/cf-callfunction.md
+100
-95
docs/cloud-obj.md
docs/cloud-obj.md
+277
-279
未找到文件。
docs/cf-callfunction.md
浏览文件 @
477e4096
...
...
@@ -17,20 +17,21 @@ callFunction方式避免了服务器提供域名,不暴露固定ip,减少被
`uniCloud.callFunction`
需要一个json对象作为参数,其中包含2个字段
|字段 |类型 |必填 |说明 |
|:-: |:-: |:-: |:-: |
|name |String |是 |云函数名称|
|data |Object |否 |客户端需要传递的参数|
|字段 |类型 |必填 |说明 |
|:-: |:-: |:-: |:-: |
|name |String |是 |云函数名称|
|data |Object |否 |客户端需要传递的参数|
|timeout|Number |否 |超时时间,单位ms,默认60000, 新增于HBuilderX 4.25|
**返回json**
|字段
|类型 |说明
|
|:-:
|:-: |:-:
|
|result
|Object |云函数中代码return的返回结果
|
|requestId
|String |云函数请求序列号,用于错误排查,可以在uniCloud web控制台的云函数日志中查到
|
|header
|Object |服务器header信息
|
|errCode
|Number或String |服务器错误码
|
|success
|bool |执行是否成功
|
|字段
|类型 |说明
|
|:-:
|:-: |:-:
|
|result
|Object |云函数中代码return的返回结果
|
|requestId
|String |云函数请求序列号,用于错误排查,可以在uniCloud web控制台的云函数日志中查到
|
|header
|Object |服务器header信息
|
|errCode
|Number或String |服务器错误码
|
|success
|bool |执行是否成功
|
注意:
...
...
@@ -53,11 +54,11 @@ uniCloud.callFunction({
// callback方式
uniCloud
.
callFunction
({
name
:
'
hellocf
'
,
data
:
{
a
:
1
},
success
(){},
fail
(){},
complete
(){}
name
:
'
hellocf
'
,
data
:
{
a
:
1
},
success
(){},
fail
(){},
complete
(){}
});
```
...
...
@@ -66,6 +67,7 @@ uniCloud.callFunction({
客户端callFunction调用云函数时,云函数通过入参接收客户端数据,通过头信息上下文获取客户端信息,经过业务逻辑处理后给客户端返回结果。
假使客户端代码调用云函数
`hellocf`
,并传递了
`{a:1,b:2}`
的数据,
```
js
// 客户端调用云函数并传递参数
uniCloud
.
callFunction
({
...
...
@@ -76,19 +78,21 @@ uniCloud.callFunction({
```
那么云函数侧的代码如下,将传入的两个参数求和并返回客户端:
```
js
// hellocf云函数index.js入口文件代码
'
use strict
'
;
exports
.
main
=
async
(
event
,
context
)
=>
{
//event为客户端上传的参数
let
c
=
event
.
a
+
event
.
b
return
{
sum
:
c
}
// 通过return返回结果给客户端
//event为客户端上传的参数
let
c
=
event
.
a
+
event
.
b
return
{
sum
:
c
}
// 通过return返回结果给客户端
}
```
云函数的传入参数有两个,一个是
`event`
对象,一个是
`context`
对象。
-
`event`
指的是触发云函数的事件。当客户端调用云函数时,
`event`
就是客户端调用云函数时传入的参数。
-
`context`
对象包含了本次请求的上下文,包括客户端的ip、ua、appId等信息,以及云函数的环境情况、调用来源source等信息。
...
...
@@ -121,21 +125,23 @@ exports.main = async (event, context) => {
context对象的属性清单如下:
|属性名称 |类型 | 说明 |
|-- |-- |------------------------------------------------------------------------------------------------------|
|SPACEINFO |object | 服务空间信息 |
|
|
- spaceId |string | 服务空间id |
|
|
- provider |string | 服务空间供应商:alipay
|
aliyun
|
tencent |
|
|
- useOldSpaceId |boolean | 当前获取的服务空间id是否为迁移前的服务空间id,新增于
`HBuilderX 3.6.13`
|
|SOURCE |string | 云函数调用来源
[
详见
](
?id=context-source
)
|
|FUNCTION_NAME |string | 获取云函数名称 |
|FUNCTION_TYPE |string | 获取云函数类型,对于云函数来说,这里一定会返回
`cloudfunction`
,新增于HBuilderX 3.5.1。 |
|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。 |
|属性名称 |类型 | 说明 |
|-- |-- |------------------------------------------------------------------------------------------------------|
|SPACEINFO |object | 服务空间信息 |
|
|
- spaceId |string | 服务空间id |
|
|
- provider |string | 服务空间供应商:alipay
|
aliyun
|
tencent |
|
|
- useOldSpaceId |boolean | 当前获取的服务空间id是否为迁移前的服务空间id,新增于
`HBuilderX 3.6.13`
|
|SOURCE |string | 云函数调用来源
[
详见
](
?id=context-source
)
|
|FUNCTION_NAME |string | 获取云函数名称 |
|FUNCTION_TYPE |string | 获取云函数类型,对于云函数来说,这里一定会返回
`cloudfunction`
,新增于HBuilderX 3.5.1。 |
|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。 |
|RUNTIME_ENV |string | 运行环境,取值为
`local`
(本地运行)或
`cloud`
(云端运行),新增于HBuilderX 4.25。 |
除了上述属性,如果是uni-app客户端通过callfunction访问云函数,那么context还会追加一批客户端信息。
-
HBuilderX 3.4.9前,context 添加了一批大写属性,如APPID、OS。
-
HBuilderX 3.4.9起,context 的属性包括前端API
`uni.getSystemInfo`
的所有属性。比如appId、osName,均以驼峰方式命名。这些属性较多,且可能跟随前端API更新而变化,具体详见
[
uni.getSystemInfo
](
https://uniapp.dcloud.net.cn/api/system/info.html#getsysteminfo
)
...
...
@@ -148,7 +154,7 @@ HBuilderX 3.4.9起,context 的属性还可以打印出`channel`和`scene`,
```
js
'
use strict
'
;
exports
.
main
=
async
(
event
,
context
)
=>
{
//event为客户端上传的参数
//event为客户端上传的参数
//...
//context中可获取客户端调用的上下文
let
clientIP
=
context
.
CLIENTIP
// 客户端ip信息
...
...
@@ -157,22 +163,21 @@ exports.main = async (event, context) => {
// 以下属性只有使用uni-app以callFunction方式调用才能获取,即context.SOURCE=="client",调用方不是uni-app客户端则没有相应数据
let
appid
=
context
.
appId
// manifest.json中配置的appid
let
deviceId
=
context
.
deviceId
// 客户端标识,新增于HBuilderX 3.1.0,同uni-app客户端getSystemInfo接口获取的deviceId
//... //其它业务代码
//... //其它业务代码
}
```
#### 获取云函数调用来源@context-source
context.SOURCE,返回云函数调用来源,它的值域为:
|取值
|解释
|
|--
|--
|
|client
|客户端callFunction方式调用
|
|http
|云函数url化方式调用
|
|timing
|定时触发器调用
|
|function
|由其他云函数callFunction调用
|
|server
|由uniCloud管理端调用,HBuilderX里上传并运行|
|取值
|解释
|
|--
|--
|
|client
|客户端callFunction方式调用
|
|http
|云函数url化方式调用
|
|timing
|定时触发器调用
|
|function
|由其他云函数callFunction调用
|
|server
|由uniCloud管理端调用,HBuilderX里上传并运行|
```
js
'
use strict
'
;
...
...
@@ -186,12 +191,12 @@ exports.main = async (event, context) => {
}
```
**注意事项**
-
客户端上报的信息在理论上存在被篡改可能,实际业务中应验证前端传来的数据的合法性
-
`context.PLATFORM`
的取值,有
`app`
和
`app-plus`
两种情况。
*
uni-app的vue3版本取值为
`app`
*
vue2版本,在uni-app 3.4.9之前,取值为
`app-plus`
,uni-app 3.4.9起,该值修改为了
`app`
-
uni-app的vue3版本取值为
`app`
-
vue2版本,在uni-app 3.4.9之前,取值为
`app-plus`
,uni-app 3.4.9起,该值修改为了
`app`
除了CLIENTIP外,其他客户端信息只有使用uni-app客户端以callFunction方式调用才能获取。如果云函数url化后被uni-app通过request调用,也没有客户端信息。
...
...
@@ -201,7 +206,7 @@ exports.main = async (event, context) => {
```
js
exports
.
main
=
async
(
event
,
context
)
=>
{
context
.
PLATFORM
=
'
app
'
context
.
PLATFORM
=
'
app
'
}
```
...
...
@@ -214,12 +219,12 @@ exports.main = async (event, context) => {
```
js
// 客户端发起调用云函数hellocf,并传入data数据
uniCloud
.
callFunction
({
name
:
'
hellocf
'
,
data
:
{
a
:
1
,
b
:
2
}
name
:
'
hellocf
'
,
data
:
{
a
:
1
,
b
:
2
}
}).
then
((
res
)
=>
{
console
.
log
(
res
.
result
)
// 结果是 {sum: 3}
console
.
log
(
res
.
result
)
// 结果是 {sum: 3}
}).
catch
((
err
)
=>
{
console
.
error
(
err
)
console
.
error
(
err
)
})
```
...
...
@@ -227,37 +232,38 @@ uniCloud.callFunction({
// 云函数hellocf的代码,接收到客户端传递的data,并对其中a和b相加返回给客户端
'
use strict
'
;
exports
.
main
=
async
(
event
,
context
)
=>
{
//event为客户端上传的参数
console
.
log
(
'
event :
'
,
event
)
//返回数据给客户端
return
{
sum
:
event
.
a
+
event
.
b
}
//event为客户端上传的参数
console
.
log
(
'
event :
'
,
event
)
//返回数据给客户端
return
{
sum
:
event
.
a
+
event
.
b
}
};
```
那么客户端得到的res结构如下
```
json
{
"errCode"
:
0
,
"errMsg"
:
""
,
"header"
:
{
"access-control-expose-headers"
:
"Date,x-fc-request-id,x-fc-error-type,x-fc-code-checksum,x-fc-invocation-duration,x-fc-max-memory-usage,x-fc-log-result,x-fc-invocation-code-version"
"content-disposition"
:
"attachment"
"content-length"
:
"38"
"content-type"
:
"application/json"
"date"
:
"Sat, 25 Jun 2022 19:28:34 GMT"
"x-fc-code-checksum"
:
"92066386860027743"
"x-fc-instance-id"
:
"c-62b761c4-5a85e238b3ce404c817d"
"x-fc-invocation-duration"
:
"23"
"x-fc-invocation-service-version"
:
"LATEST"
"x-fc-max-memory-usage"
:
"66.61"
"x-fc-request-id"
:
"80854b93-b0c7-43ab-ab16-9ee9f77ff41e"
"x-serverless-request-id"
:
"ac1403831656185314624173902"
"x-serverless-runtime-version"
:
"1.2.2"
}
"requestId"
:
"ac1403831656185314624173902"
"result"
:
{
sum:
3
}
"success"
:
true
"errCode"
:
0
,
"errMsg"
:
""
,
"header"
:
{
"access-control-expose-headers"
:
"Date,x-fc-request-id,x-fc-error-type,x-fc-code-checksum,x-fc-invocation-duration,x-fc-max-memory-usage,x-fc-log-result,x-fc-invocation-code-version"
"content-disposition"
:
"attachment"
"content-length"
:
"38"
"content-type"
:
"application/json"
"date"
:
"Sat, 25 Jun 2022 19:28:34 GMT"
"x-fc-code-checksum"
:
"92066386860027743"
"x-fc-instance-id"
:
"c-62b761c4-5a85e238b3ce404c817d"
"x-fc-invocation-duration"
:
"23"
"x-fc-invocation-service-version"
:
"LATEST"
"x-fc-max-memory-usage"
:
"66.61"
"x-fc-request-id"
:
"80854b93-b0c7-43ab-ab16-9ee9f77ff41e"
"x-serverless-request-id"
:
"ac1403831656185314624173902"
"x-serverless-runtime-version"
:
"1.2.2"
}
"requestId"
:
"ac1403831656185314624173902"
"result"
:
{
sum:
3
}
"success"
:
true
}
```
...
...
@@ -266,11 +272,11 @@ exports.main = async (event, context) => {
注意:HBuilderX本地运行云函数时,如果没有系统错误,则只返回
`result`
,其他需要在云端运行云函数才会返回。
-
errCode为0时,success也是true。
*
表示云函数在系统层面没有运行错误。可以正常返回result。前端callFunction会进入success回调
*
如果开发者的业务有报错,可以在 result 里返回 errCode 和 errMsg。
-
表示云函数在系统层面没有运行错误。可以正常返回result。前端callFunction会进入success回调
-
如果开发者的业务有报错,可以在 result 里返回 errCode 和 errMsg。
-
errCode不为0时,success为false。
*
表示云函数在系统层面报错了,比如联网失败、云函数超时、内存超限等错误。前端callFunction会进入fail回调
*
发生系统错误时 result 里无法正常返回业务错误。errCode不为0时,还会返回errMsg。
-
表示云函数在系统层面报错了,比如联网失败、云函数超时、内存超限等错误。前端callFunction会进入fail回调
-
发生系统错误时 result 里无法正常返回业务错误。errCode不为0时,还会返回errMsg。
-
requestId是云函数的请求id,线上运行时,可以在uniCloud web控制台的云函数日志中查看运行日志。
-
header是云厂商的一些信息,阿里云和腾讯云不同,上面示例代码是阿里云的header。
...
...
@@ -283,24 +289,23 @@ exports.main = async (event, context) => {
```
js
'
use strict
'
;
exports
.
main
=
async
(
event
,
context
)
=>
{
//event为客户端上传的参数
console
.
log
(
'
event :
'
,
event
)
if
(
!
event
.
a
)
{
return
{
errCode
:
1
,
errMsg
:
"
参数a不能为空
"
}
}
if
(
!
event
.
b
)
{
return
{
errCode
:
2
,
errMsg
:
"
参数b不能为空
"
}
}
const
c
=
event
.
a
+
event
.
b
if
(
isNaN
(
c
))
{
return
{
errCode
:
3
,
errMsg
:
"
参数a和b无法求和
"
}
}
//返回数据给客户端
return
{
sum
:
c
,
errCode
:
1
,
errMsg
:
"
0
"
}
//event为客户端上传的参数
console
.
log
(
'
event :
'
,
event
)
if
(
!
event
.
a
)
{
return
{
errCode
:
1
,
errMsg
:
"
参数a不能为空
"
}
}
if
(
!
event
.
b
)
{
return
{
errCode
:
2
,
errMsg
:
"
参数b不能为空
"
}
}
const
c
=
event
.
a
+
event
.
b
if
(
isNaN
(
c
))
{
return
{
errCode
:
3
,
errMsg
:
"
参数a和b无法求和
"
}
}
//返回数据给客户端
return
{
sum
:
c
,
errCode
:
1
,
errMsg
:
"
0
"
}
};
```
## 在云函数中使用cookie
详见:
[
url化场景下使用cookie
](
http.md#cookie
)
docs/cloud-obj.md
浏览文件 @
477e4096
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录