Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
b133fa30
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看板
未验证
提交
b133fa30
编写于
8月 24, 2022
作者:
Grits优选客服
提交者:
Gitee
8月 24, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs/uniCloud/uni-cloud-router.md.
Signed-off-by:
mmsen
<
m.msen@163.com
>
上级
f97e9968
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
132 addition
and
0 deletion
+132
-0
docs/uniCloud/uni-cloud-router.md
docs/uniCloud/uni-cloud-router.md
+132
-0
未找到文件。
docs/uniCloud/uni-cloud-router.md
浏览文件 @
b133fa30
...
...
@@ -14,6 +14,7 @@
-
[
如何编写 Controller
](
#如何编写-controller
)
-
[
获取请求参数
](
#获取请求参数
)
-
[
调用 Service
](
#调用-service
)
-
[
集成化返回
](
#集成化返回
)
-
[
定制 URL 化返回的状态码
](
#定制-url-化返回的状态码
)
-
[
Cookie使用
](
#Cookie使用
)
-
[
服务(Service)
](
#服务service
)
...
...
@@ -217,6 +218,137 @@ 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
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录