Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
8fb0d479
U
unidocs-zh
项目概览
程序yang
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8fb0d479
编写于
8月 25, 2022
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update uni-cloud-router
上级
b133fa30
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
157 deletion
+21
-157
docs/uniCloud/uni-cloud-router.md
docs/uniCloud/uni-cloud-router.md
+21
-157
未找到文件。
docs/uniCloud/uni-cloud-router.md
浏览文件 @
8fb0d479
...
...
@@ -4,32 +4,6 @@
源码仓库:
[
https://gitee.com/dcloud/uni-cloud-router
](
https://gitee.com/dcloud/uni-cloud-router
)
---
-
[
云函数端
](
#云函数端
)
-
[
安装
](
#安装
)
-
[
目录结构
](
#目录结构
)
-
[
控制器(Controller)
](
#控制器controller
)
-
[
如何编写 Controller
](
#如何编写-controller
)
-
[
获取请求参数
](
#获取请求参数
)
-
[
调用 Service
](
#调用-service
)
-
[
集成化返回
](
#集成化返回
)
-
[
定制 URL 化返回的状态码
](
#定制-url-化返回的状态码
)
-
[
Cookie使用
](
#Cookie使用
)
-
[
服务(Service)
](
#服务service
)
-
[
使用场景
](
#使用场景
)
-
[
如何编写 Service
](
#如何编写-service
)
-
[
使用 Service
](
#使用-service
)
-
[
中间件(Middleware)
](
#中间件middleware
)
-
[
开发中间件
](
#开发中间件
)
-
[
使用中间件
](
#使用中间件
)
-
[
Context
](
#context
)
-
[
获取方式
](
#获取方式
)
-
[
客户端
](
#客户端
)
-
[
发送请求
](
#发送请求
)
-
[
返回结果
](
#返回结果
)
## 云函数端
### 安装
...
...
@@ -218,137 +192,6 @@ class PostController extends Controller {
Service 的具体写法,请查看
[
Service
](
#服务service
)
章节。
#### 集成化返回
在
`uni-cloud-router`
的
`Controller内集成化返回与云函数集成化返回稍有不同
> 返回字符串
```js
class PostController extends Controller
{
async load(ctx) {
//必须设置 如果直接return 'abc', 客户端输为 '"abc"'
ctx.headers = {'content-type':'text/html'}
ctx.body = 'String'
//或 return 'String'
}
}
```
> 返回javascript
```js
class PostController extends Controller
{
async load(ctx) {
ctx.headers = {'content-type':'application/javascript'}
ctx.body = 'console.log("abc")'
}
}
```
> 返回html
```js
class PostController extends Controller
{
async load(ctx) {
ctx.headers = {'content-type':'text/html'}
ctx.body = `<html>
<head>
</head>
<body>
<h1>Hellow</h1>
</body>
</html>
`
}
}
```
> 返回XML
```js
class PostController extends Controller
{
async load(ctx) {
ctx.headers = {'content-type':'text/xml'}
ctx.body = `<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>`
}
}
```
> 从远程加载一张图片返回二进制流
```js
/**
* @params {Buffer} fileBuffer 加载的图片数据
* @return {String} 不带.的图片扩展名
*/
getImageExtensionName(fileBuffer) {
// 将上文提到的 文件标识头 按 字节 整理到数组中
const imageBufferHeaders = [
{bufBegin: [0xff, 0xd8],bufEnd: [0xff, 0xd9], ext: 'jpg' },
{bufBegin: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], ext: 'png'},
{bufBegin: [0x47, 0x49, 0x46, 0x38, 0x39, 0x61],ext: 'gif'},
{bufBegin: [0x47, 0x49, 0x46, 0x38, 0x37, 0x61],ext: 'gif'},
{bufBegin: [0x42, 0x4d],ext: 'bmp'},
{bufBegin: [0x49, 0x49],ext: 'tif'},
{bufBegin: [0x4d, 0x4d],ext: 'tif'},
{bufBegin: [0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20],ext: 'ico'}
]
for (const imageBufferHeader of imageBufferHeaders) {
let isEqual
// 判断标识头前缀
if (imageBufferHeader.bufBegin) {
const buf = Buffer.from(imageBufferHeader.bufBegin)
//使用 buffer.slice 方法 对 buffer 以字节为单位切割
isEqual = buf.equals(fileBuffer.slice(0, imageBufferHeader.bufBegin.length))
}
// 判断标识头后缀
if (isEqual && imageBufferHeader.bufEnd) {
const buf = Buffer.from(imageBufferHeader.bufEnd)
isEqual = buf.equals(fileBuffer.slice(-imageBufferHeader.bufEnd.length))
}
if (isEqual) {
return imageBufferHeader.ext
}
}
// 未能识别到该文件类型
return ''
}
class MediaController extends Controller
{
async load(ctx) {
const {data} = await this.curl('图片地址后获取图片的url')
ctx.isBase64Encoded = true
if( data && data.constructor == Buffer )
{
//假设你知道加载的图片类型可以直接设置content-type
//如果图片类型未知则需要通过getImageExtensionName分析data的图片类型,例如微信通过media_id获取素材资源等
const ext = getImageExtensionName(data)
ctx.headers = {'content-type': `image/${ext}`}
ctx.body = Buffer.from(data).toString('base64')
}
else
{
ctx.headers = {'content-type': 'image/png'}
ctx.body = '一个默认的png类型的Base64图片'
}
}
}
```
#### 定制 URL 化返回的状态码
```
js
...
...
@@ -376,7 +219,28 @@ class PostController extends Controller {
-
响应头内各个字段请使用全小写,例:'Content-Type' ×,'content-type' √
#### URL 化返回响应体@url-binary
```
js
// 返回javascript内容
class
GetController
extends
Controller
{
async
create
()
{
ctx
.
headers
=
{
'
content-type
'
:
'
application/javascript
'
}
ctx
.
body
=
'
console.log("abc")
'
}
}
```
```
js
// 返回图片
class
GetController
extends
Controller
{
async
create
()
{
ctx
.
isBase64Encoded
=
true
ctx
.
headers
=
{
'
content-type
'
:
'
image/png
'
}
ctx
.
body
=
'
图片Buffer对应的base64内容
'
}
}
```
## Cookie的使用
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录