Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
4c981962
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3200
Star
106
Fork
813
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
94
列表
看板
标记
里程碑
合并请求
70
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
94
Issue
94
列表
看板
标记
里程碑
合并请求
70
合并请求
70
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4c981962
编写于
8月 11, 2022
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update uniCloud http trigger
上级
cf754caf
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
158 addition
and
131 deletion
+158
-131
docs/uniCloud/cf-callfunction.md
docs/uniCloud/cf-callfunction.md
+1
-40
docs/uniCloud/cloud-obj.md
docs/uniCloud/cloud-obj.md
+3
-0
docs/uniCloud/http.md
docs/uniCloud/http.md
+154
-91
未找到文件。
docs/uniCloud/cf-callfunction.md
浏览文件 @
4c981962
...
@@ -296,44 +296,5 @@ exports.main = async (event, context) => {
...
@@ -296,44 +296,5 @@ exports.main = async (event, context) => {
## 在云函数中使用cookie
## 在云函数中使用cookie
在某些场景下,cookie依然占有重要地位,例如在云函数URL化的情况下,获取客户端的状态
详见:
[
url化场景下使用cookie
](
http.md#cookie
)
在云函数中使用cookie需要依赖cookie库
[
npm页面地址
](
http://https://www.npmjs.com/package/cookie
)
,可以通过
`npm inistall cookie`
安装
```
js
'
use strict
'
;
//引入cookie
const
cookie
=
require
(
'
cookie
'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
//event为客户端上传的参数
//如果客户端有cookie,则cookie回随请求携带至服务端,放置在event.headers.cookie中,假设 cookie为“[jwt=自加密base64; app=uniCloud]”
console
.
log
(
'
event :
'
,
event
)
//解析cookie
const
cookieData
=
cookie
.
parse
(
event
.
headers
.
cookie
||
''
)
console
.
log
(
cookieData
)
//输出结果为:{jwt:"自加密base64", app:"uniCloud" }
//设置cookie到客户端
const
cookieOptions
=
{
//具体参数请查阅 https://www.npmjs.com/package/cookie
maxAge
:
60
*
60
*
24
*
7
,
//一周
path
:
"
/
"
}
const
setCookieData
=
cookie
.
serialize
(
'
app
'
,
'
appName
'
,
cookieOptions
)
return
{
statusCode
:
200
,
headers
:
{
'
content-type
'
:
'
返回数据类型
'
,
'
set-cookie
'
:
setCookieData
},
body
:
'
返回数据
'
}
};
```
docs/uniCloud/cloud-obj.md
浏览文件 @
4c981962
...
@@ -745,6 +745,9 @@ method1(param1) {
...
@@ -745,6 +745,9 @@ method1(param1) {
调用该方法时可以看到代码提示:
调用该方法时可以看到代码提示:
![](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/a94aa7c2-daa6-4bcb-a74c-d0e5c5c58b12.jpg
)
![](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/a94aa7c2-daa6-4bcb-a74c-d0e5c5c58b12.jpg
)
## 在云对象中使用cookie
详见:
[
url化场景下使用cookie
](
http.md#cookie
)
## 注意事项
## 注意事项
...
...
docs/uniCloud/http.md
浏览文件 @
4c981962
...
@@ -18,7 +18,7 @@ url化后需要注意以下几点
...
@@ -18,7 +18,7 @@ url化后需要注意以下几点
-
腾讯云免费服务空间最多只支持配置10个云函数URL化地址
-
腾讯云免费服务空间最多只支持配置10个云函数URL化地址
## 操作步骤
## 操作步骤
@steps
### 设置云函数 HTTP 访问地址@set-path
### 设置云函数 HTTP 访问地址@set-path
...
@@ -67,15 +67,17 @@ url化后需要注意以下几点
...
@@ -67,15 +67,17 @@ url化后需要注意以下几点
在阿里云申请的ssl证书包含一个pem文件和一个key文件,pem的文本内容为证书内容,key文件的内容为私钥
在阿里云申请的ssl证书包含一个pem文件和一个key文件,pem的文本内容为证书内容,key文件的内容为私钥
## 普通云函数@cf-url
### 通过 HTTP URL 方式访问云函数@request-url
### 通过 HTTP URL 方式访问云函数@request-url
通过
`https://${云函数Url化域名}/${path}`
直接访问函数,其中
`${path}`
是配置的函数触发路径。
通过
`https://${云函数Url化域名}/${path}`
直接访问函数,其中
`${path}`
是配置的函数触发路径
或其子路径
。
### 云函数的入参@input
### 云函数的入参@input
使用 HTTP 访问云函数时,HTTP 请求会被转化为特殊的结构体,称之为
**集成请求**
,结构如下:
使用 HTTP 访问云函数时,HTTP 请求会被转化为特殊的结构体,称之为
**集成请求**
,结构如下:
```
shell
```
js
{
{
path
:
'
HTTP请求路径,如 /hello
'
,
path
:
'
HTTP请求路径,如 /hello
'
,
httpMethod
:
'
HTTP请求方法,如 GET
'
,
httpMethod
:
'
HTTP请求方法,如 GET
'
,
...
@@ -87,12 +89,12 @@ url化后需要注意以下几点
...
@@ -87,12 +89,12 @@ url化后需要注意以下几点
```
```
下面是一个示例:
下面是一个示例:
```
shell
```
js
{
{
path
:
'
/
'
,
path
:
'
/
'
,
httpMethod
:
'
GET
'
,
httpMethod
:
'
GET
'
,
headers
:
{
headers
:
{
'host'
:
'xxx.
service.tcloudbas
e.com'
,
'
host
'
:
'
xxx.
exampl
e.com
'
,
'
connection
'
:
'
close
'
,
'
connection
'
:
'
close
'
,
'
user-agent
'
:
'
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
'
,
'
user-agent
'
:
'
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
'
,
'
accept
'
:
'
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
'
,
'
accept
'
:
'
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
'
,
...
@@ -109,7 +111,7 @@ url化后需要注意以下几点
...
@@ -109,7 +111,7 @@ url化后需要注意以下几点
使用GET请求
`https://${云函数Url化域名}/${functionPath}?a=1&b=2`
,云函数接收到的
`event`
为
使用GET请求
`https://${云函数Url化域名}/${functionPath}?a=1&b=2`
,云函数接收到的
`event`
为
```
```
js
{
{
path
:
'
/
'
,
path
:
'
/
'
,
httpMethod
:
'
GET
'
,
httpMethod
:
'
GET
'
,
...
@@ -120,7 +122,7 @@ url化后需要注意以下几点
...
@@ -120,7 +122,7 @@ url化后需要注意以下几点
```
```
使用POST请求
`https://${
spaceId}.service.tcloudbase.com
/${functionPath}`
,云函数接收到的
`event.body`
为请求发送的数据,
**uni.request默认content-type为application/json**
使用POST请求
`https://${
云函数Url化域名}
/${functionPath}`
,云函数接收到的
`event.body`
为请求发送的数据,
**uni.request默认content-type为application/json**
```
js
```
js
// 以uni.request为例
// 以uni.request为例
...
@@ -149,51 +151,52 @@ uni.request({
...
@@ -149,51 +151,52 @@ uni.request({
}
}
```
```
**注意**
### 云函数url化返回值
-
阿里云目前请求与响应有如下限制
参考:
[
url化返回值
](
#output
)
+
请求Body大小限制,不能超过1MB。
+
响应Body大小限制,不能超过1MB。
-
腾讯云目前请求与响应有如下限制
+
请求Body大小限制,文本不能超过100KB,二进制不能超过20MB。
+
响应Body大小限制,不能超过6MB。
>在云函数URL化的场景无法获取客户端平台信息,可以在调用依赖客户端平台的接口接口之前(推荐在云函数入口)通过修改context.PLATFORM手动传入客户端平台信息
## 云对象使用url化@cloudobject
例:
云对象使用url化配置仍需按照上文的操作步骤来,参考:
[
url化操作步骤
](
#steps
)
```
js
### 通过 HTTP URL 方式访问云对象@request-co-url
exports
.
main
=
async
(
event
,
context
)
=>
{
context
.
PLATFORM
=
'
app
'
}
```
云函数接收到的post请求的请求体可能是被转成base64的,如果是这样需要进行一次转化
。
调用url化的云对象时,以
`url化路径/云对象方法名`
形式的链接访问云对象的方法。例如:云对象配置的触发路径是
`/todo`
,调用
`/todo/addTodo`
即会触发云对象的addTodo方法。方法区分大小写且不可含
`/`
。
以接收application/json格式的post请求为例
### 云对象入参@input
url内query部分会被转换成云对象方法的入参。以下面的todo云对象为例
```
js
```
js
exports
.
main
=
function
(
event
)
{
module
.
exports
=
{
let
body
=
event
.
body
addTodo
:
function
(
params
)
{
if
(
event
.
isBase64Encoded
){
console
.
log
(
params
)
body
=
Buffer
.
from
(
body
)
return
{
}
errCode
:
0
const
param
=
JSON
.
parse
(
body
)
// param为客户端上传的数据
}
// ...
}
}
}
```
```
**关于path的说明**
如果通过
`https://xxx.com/todo/addTodo?title=todo-title&content=todo-content`
调用云对象,todo方法内的console.log会输出以下内容
`{title: 'todo-title', content: 'todo-content'}`
需要注意的是自url内解析出的参数均为字符串类型。
**注意**
-
url化方式调用云对象时,
`_before`
和
`_after`
均正常执行
-
如果需要获取其他方式传入云对象的参数(如:post一个json内容到云对象),请使用
[
this.getHttpInfo
](
cloud-obj.md#get-http-info
)
获取
url化场景下,event.path表示以配置的url化路径为根路径的访问路径。以配置
`/test`
为云函数url化路径,访问
`/test/a/b/c`
时event.path为
`/a/b/c`
### 云对象url化返回值
参考:
[
url化返回值
](
#output
)
##
# 云函数的
返回值@output
##
url化
返回值@output
云函数
可以返回
`string`
、
`object`
、
`number`
等类型的数据,或者返回
[
集成响应
](
#Integrationresponse
)
,随后云接入
会将返回值转化为正常的 HTTP 响应。
云函数
、云对象可以返回
`string`
、
`object`
、
`number`
等类型的数据,或者返回
[
集成响应
](
#Integrationresponse
)
,uniCloud
会将返回值转化为正常的 HTTP 响应。
###
#
返回字符串或数字
### 返回字符串或数字
云函数返回字符串,那么:
云函数返回字符串,那么:
```
js
```
js
...
@@ -212,7 +215,7 @@ content-length: 13
...
@@ -212,7 +215,7 @@ content-length: 13
hello gateway
hello gateway
```
```
###
#
返回 Object
### 返回 Object
返回的
`Object`
会被转换为 JSON,同时 HTTP 响应的
`content-type`
会被设置为
`application/json`
:
返回的
`Object`
会被转换为 JSON,同时 HTTP 响应的
`content-type`
会被设置为
`application/json`
:
...
@@ -234,7 +237,7 @@ content-length: 13
...
@@ -234,7 +237,7 @@ content-length: 13
{
"foo"
:
"bar"
}
{
"foo"
:
"bar"
}
```
```
###
#
返回集成响应@Integrationresponse
### 返回集成响应@Integrationresponse
云函数可以返回如下这样特殊结构的
**集成响应**
,来自由地控制响应体:
云函数可以返回如下这样特殊结构的
**集成响应**
,来自由地控制响应体:
...
@@ -250,22 +253,20 @@ content-length: 13
...
@@ -250,22 +253,20 @@ content-length: 13
**headers内可以返回传统服务器的所有响应头,包括Set-Cookie、Content-Type等**
**headers内可以返回传统服务器的所有响应头,包括Set-Cookie、Content-Type等**
####
# 使用集成响应返回
HTML
####
使用集成响应返回
HTML
将
`content-type`
设置为
`text/html`
,即可在
`body`
中返回 HTML,会被浏览器自动解析:
将
`content-type`
设置为
`text/html`
,即可在
`body`
中返回 HTML,会被浏览器自动解析:
**阿里云默认域名无法返回html并在浏览器中展示,只可以触发下载(无法修改Content-Disposition)。绑定自定义域名无此限制**
**阿里云默认域名无法返回html并在浏览器中展示,只可以触发下载(无法修改Content-Disposition)。绑定自定义域名无此限制**
```
js
```
js
exports
.
main
=
function
()
{
{
return
{
mpserverlessComposedResponse
:
true
,
// 使用阿里云返回集成响应是需要此字段为true
mpserverlessComposedResponse
:
true
,
// 使用阿里云返回集成响应是需要此字段为true
statusCode
:
200
,
statusCode
:
200
,
headers
:
{
headers
:
{
'
content-type
'
:
'
text/html
'
'
content-type
'
:
'
text/html
'
},
},
body
:
'
<h1>Hello</h1>
'
body
:
'
<h1>Hello</h1>
'
}
}
}
```
```
...
@@ -279,20 +280,18 @@ content-length: 14
...
@@ -279,20 +280,18 @@ content-length: 14
<h1>Hello</h1>
<h1>Hello</h1>
```
```
####
#
使用集成响应返回 JS 文件
#### 使用集成响应返回 JS 文件
将
`content-type`
设置为
`application/javascript`
,即可在
`body`
中返回 JavaScript 文件:
将
`content-type`
设置为
`application/javascript`
,即可在
`body`
中返回 JavaScript 文件:
```
js
```
js
exports
.
main
=
function
()
{
{
return
{
mpserverlessComposedResponse
:
true
,
// 使用阿里云返回集成响应是需要此字段为true
mpserverlessComposedResponse
:
true
,
// 使用阿里云返回集成响应是需要此字段为true
statusCode
:
200
,
statusCode
:
200
,
headers
:
{
headers
:
{
'
content-type
'
:
'
application/javascript
'
'
content-type
'
:
'
application/javascript
'
},
},
body
:
'
console.log("Hello!")
'
body
:
'
console.log("Hello!")
'
}
}
}
```
```
...
@@ -306,21 +305,19 @@ content-length: 21
...
@@ -306,21 +305,19 @@ content-length: 21
console.log
(
"Hello!"
)
console.log
(
"Hello!"
)
```
```
####
#
使用集成响应返回二进制文件
#### 使用集成响应返回二进制文件
如果返回体是诸如图片、音视频这样的二进制文件,那么可以将
`isBase64Encoded`
设置为
`true`
,并且将二进制文件内容转为 Base64 编码的字符串,例如:
如果返回体是诸如图片、音视频这样的二进制文件,那么可以将
`isBase64Encoded`
设置为
`true`
,并且将二进制文件内容转为 Base64 编码的字符串,例如:
```
js
```
js
exports
.
main
=
function
()
{
{
return
{
mpserverlessComposedResponse
:
true
,
// 使用阿里云返回集成响应是需要此字段为true
mpserverlessComposedResponse
:
true
,
// 使用阿里云返回集成响应是需要此字段为true
isBase64Encoded
:
true
,
isBase64Encoded
:
true
,
statusCode
:
200
,
statusCode
:
200
,
headers
:
{
headers
:
{
'
content-type
'
:
'
image/png
'
'
content-type
'
:
'
image/png
'
},
},
body
:
'
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAY...
'
body
:
'
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAY...
'
}
}
}
```
```
...
@@ -335,46 +332,112 @@ content-length: 9897
...
@@ -335,46 +332,112 @@ content-length: 9897
<binary payload...>
<binary payload...>
```
```
####
#
返回不同的状态码
#### 返回不同的状态码
如需重定向或返回4xx,5xx等自定义状态码等,可以使用如下方式
如需重定向或返回4xx,5xx等自定义状态码等,可以使用如下方式
**注意:阿里云默认域名不支持在返回的header里面使用location,绑定自定义域名能正常使用**
**注意:阿里云默认域名不支持在返回的header里面使用location,绑定自定义域名能正常使用**
```
js
```
js
exports
.
main
=
function
()
{
{
return
{
mpserverlessComposedResponse
:
false
,
// 使用阿里云返回集成响应是需要此字段为true
mpserverlessComposedResponse
:
false
,
// 使用阿里云返回集成响应是需要此字段为true
isBase64Encoded
:
false
,
isBase64Encoded
:
false
,
statusCode
:
301
,
statusCode
:
301
,
headers
:
{
headers
:
{
'
location
'
:
'
http://www.baidu.com
'
'
location
'
:
'
http://www.baidu.com
'
}
}
}
}
}
```
```
### 云对象使用url化@cloudobject
## 处理cookie@cookie
云对象使用url化配置方式和云函数一致,需要先在
[
uniCloud web控制台
](
https://unicloud.dcloud.net.cn/home
)
的云对象详情里面设置URL的PATH部分。生产环境建议绑定自定义域名,参考:
[
云函数绑定自定义域名
](
#custom-domain
)
调用url化的云对象时,以
`url化路径/云对象方法名`
形式的链接访问云对象的方法。例如:云对象配置的触发路径是
`/todo`
,调用
`/todo/addTodo`
即会触发云对象的addTodo方法。方法区分大小写且不可含
`/`
。
在某些场景下,cookie依然占有重要地位,例如在云函数URL化的情况下,获取客户端的状态
url内query部分会被转换成云对象方法的入参。以下面的todo云对象为例
在云函数中使用cookie需要依赖cookie库
[
npm页面地址
](
http://https://www.npmjs.com/package/cookie
)
,可以通过
`npm inistall cookie`
安装
```
js
```
js
module
.
exports
=
{
// 普通云函数
addTodo
:
function
(
params
)
{
'
use strict
'
;
console
.
log
(
params
)
//引入cookie
const
cookie
=
require
(
'
cookie
'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
const
cookieData
=
cookie
.
parse
(
event
.
headers
.
cookie
||
''
)
//设置cookie到客户端
const
cookieOptions
=
{
//具体参数请查阅 https://www.npmjs.com/package/cookie
maxAge
:
60
*
60
*
24
*
7
,
//一周
path
:
"
/
"
}
}
}
const
setCookieData
=
cookie
.
serialize
(
'
app
'
,
'
appName
'
,
cookieOptions
)
return
{
statusCode
:
200
,
headers
:
{
'
content-type
'
:
'
返回数据类型
'
,
'
set-cookie
'
:
setCookieData
// 在headers内返回set-cookie用于设置客户端cookie
},
body
:
'
返回数据
'
}
};
// 云对象
'
use strict
'
;
//引入cookie
const
cookie
=
require
(
'
cookie
'
)
module
.
exports
=
{
addTodo
:
function
()
{
const
httpInfo
=
this
.
getHttpInfo
()
const
cookieData
=
cookie
.
parse
(
httpInfo
.
headers
.
cookie
||
''
)
//设置cookie到客户端
const
cookieOptions
=
{
//具体参数请查阅 https://www.npmjs.com/package/cookie
maxAge
:
60
*
60
*
24
*
7
,
//一周
path
:
"
/
"
}
const
setCookieData
=
cookie
.
serialize
(
'
app
'
,
'
appName
'
,
cookieOptions
)
return
{
statusCode
:
200
,
headers
:
{
'
content-type
'
:
'
返回数据类型
'
,
'
set-cookie
'
:
setCookieData
// 在headers内返回set-cookie用于设置客户端cookie
},
body
:
'
返回数据
'
}
}
};
```
```
如果通过
`https://xxx.com/todo/addTodo?title=todo-title&content=todo-content`
调用云对象,todo方法内的console.log会输出以下内容
`{title: 'todo-title', content: 'todo-content'}`
需要注意的是自url内解析出的参数均为字符串类型。
**注意**
## 注意事项@tips
-
url化方式调用云对象时,
`_before`
和
`_after`
均正常执行
-
阿里云目前请求与响应有如下限制
-
如果需要获取其他方式传入云对象的参数(如:post一个json内容到云对象),请使用
[
this.getHttpInfo
](
cloud-obj.md#get-http-info
)
获取
+
请求Body大小限制,不能超过1MB。
\ No newline at end of file
+
响应Body大小限制,不能超过1MB。
-
腾讯云目前请求与响应有如下限制
+
请求Body大小限制,文本不能超过100KB,二进制不能超过20MB。
+
响应Body大小限制,不能超过6MB。
-
url化场景下,path(云函数event.path、云对象httpInfo.path)表示以配置的url化路径为根路径的访问路径。以配置
`/test`
为云函数url化路径,访问
`/test/a/b/c`
时path为
`/a/b/c`
-
在URL化的场景无法获取客户端平台等信息,但是可以获取客户端IP、客户端userAgent
-
接收到的post请求的请求体可能是被转成base64的,如果是这样需要进行一次转化。
以接收text/xml格式的post请求为例
```
js
// 云函数
exports
.
main
=
function
(
event
)
{
let
body
=
event
.
body
if
(
event
.
isBase64Encoded
){
body
=
Buffer
.
from
(
body
,
'
base64
'
).
toString
(
'
utf8
'
)
// 将base64格式的xml内容转为xml字符串
}
}
// 云对象
module
.
exports
=
{
addTodo
:
function
()
{
let
httpInfo
=
this
.
getHttpInfo
()
let
body
=
httpInfo
.
body
if
(
httpInfo
.
isBase64Encoded
){
body
=
Buffer
.
from
(
body
,
'
base64
'
).
toString
(
'
utf8
'
)
// 将base64格式的xml内容转为xml字符串
}
}
}
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录