quickstart.md 25.9 KB
Newer Older
雪洛's avatar
雪洛 已提交
1 2
## 创建uniCloud项目
  
W
wanganxp 已提交
3
  -[HBuilderX 2.5.8+](https://www.dcloud.io/hbuilderx.html) 新建项目,选择uni-app项目,并勾选`启用uniCloud`
W
wanganxp 已提交
4
  - 在右侧选择服务供应商
雪洛's avatar
雪洛 已提交
5 6 7

![创建uniCloud项目](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/create-project.png)

W
wanganxp 已提交
8 9
  - 对于老的uni-app项目,也可以对项目点右键,菜单中选择“创建uniCloud云开发环境”
  - 新建uni-app项目的模板中,有一个`Hello uniCloud`项目模板,演示了各种云函数的使用。
雪洛's avatar
雪洛 已提交
10

W
wanganxp 已提交
11
  uniCloud云开发环境创建成功后,项目根目录下会有一个带有云图标的特殊目录,名为“cloudfunctions”。(即便是cli创建的项目,云函数目录也在项目的根目录下,而不是src下)
雪洛's avatar
雪洛 已提交
12
  
雪洛's avatar
雪洛 已提交
13
  非uni-app项目也可以通过使用[云函数Url化](uniCloud/http.md)来享受云函数的带来的便利。
雪洛's avatar
雪洛 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
  
## 目录结构

HBuilderX 3.0起目录结构做了调整如下:

```bash
┌──uniCloud-aliyun                    云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb
|   |——— cloudfunctions               云函数目录
|   |   │───common                    云函数公用模块目录 [详情](https://uniapp.dcloud.io/uniCloud/cf-common)
|   |   |   └──hello-common           云函数公用模块
|   |   |      │──index.js            公用模块代码
|   |   |      └──package.json        公用模块package.json
|   |   │───uni-clientDB-actions
|   |   │      └──new_action.js       clientDB action代码 [详情](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action)
|   |   └───function-name             云函数目录
|   |         │──index.js             云函数代码
W
wanganxp 已提交
30
|   |         └──package.json         包含云函数的配置信息,如url化、定时设置、内存等内容 [详情](/uniCloud/cf-functions?id=packagejson)
雪洛's avatar
雪洛 已提交
31 32 33
│   └──database                       云数据目录
│         │──validateFunction         数据库扩展校验函数目录 [详情](https://uniapp.dcloud.net.cn/uniCloud/hellodb?id=db-init)
│         │   └──new_validation.js    扩展校验函数代码 [详情](https://uniapp.dcloud.net.cn/uniCloud/schema?id=validatefunction)
W
wanganxp 已提交
34 35
│         │──db_init.json             db_init.json初始化数据库文件,其中不再包含schema [详情](https://uniapp.dcloud.net.cn/uniCloud/hellodb?id=db-init)
│         └──xxx.schema.json          数据表xxx的DB Schema [详情](https://uniapp.dcloud.net.cn/uniCloud/schema)
雪洛's avatar
雪洛 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
根目录
```

HBuilderX 3.0之前版本目录结构如下

```bash
┌──cloudfunctions-aliyun            云空间目录,阿里云为cloudfunctions-aliyun,腾讯云为cloudfunctions-tcb
|   │───function-name               云函数目录
|   |      │──index.js              云函数代码
|   |      └──package.json          标准package.json
|   │───common                      云函数公用模块目录 [详情](https://uniapp.dcloud.io/uniCloud/cf-common)
|   |   └──hello-common             云函数公用模块
|   |      │──index.js              公用模块代码
|   |      └──package.json          公用模块package.json
|   │───uni-clientDB-actions
|   │      └──new_action.js         clientDB action代码 [详情](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action)
W
wanganxp 已提交
52
│   │───db_init.json                初始化数据库文件 [详情](https://uniapp.dcloud.net.cn/uniCloud/hellodb?id=db-init)
雪洛's avatar
雪洛 已提交
53 54 55 56 57
│   └───cloudfunctions_init.json    云函数初始化文件 [详情](https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=init)

根目录
```

雪洛's avatar
雪洛 已提交
58

W
wanganxp 已提交
59 60
## 创建和绑定服务空间

W
wanganxp 已提交
61
项目环境建好后,需要为这个项目选择一个服务空间。如果开发者账户没有实名认证,首先需要实名认证(这是法定要求,也是阿里云、腾讯云等云服务商的要求)。
W
wanganxp 已提交
62

雪洛's avatar
雪洛 已提交
63
一个开发者可以拥有多个服务空间,每个服务空间都是一个独立的serverless云环境,不同服务空间之间的云函数、数据库、存储都是隔离的。
雪洛's avatar
雪洛 已提交
64

W
wanganxp 已提交
65
注:目前腾讯云仅提供一个服务空间。阿里云无限制
W
wanganxp 已提交
66

W
wanganxp 已提交
67 68
服务空间和手机端项目是多对多绑定关系。同账号下,一个项目可以关联到多个服务空间。一个服务空间也可以被多个项目访问。

雪洛's avatar
雪洛 已提交
69
  - 在云函数目录`cloudfunctions`右键菜单创建服务空间(HBuilderX 3.0以上版本请在uniCloud目录右键),会打开web控制台[https://unicloud.dcloud.net.cn](https://unicloud.dcloud.net.cn) 进行创建
雪洛's avatar
雪洛 已提交
70 71 72

![创建服务空间](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/create-space.png)

雪洛's avatar
雪洛 已提交
73
  - 创建好服务空间后,对目录`cloudfunctions`点右键(HBuilderX 3.0以上版本请在uniCloud目录右键),菜单中点击`选择云服务空间`,绑定你之前创建的服务空间。
W
wanganxp 已提交
74
  
雪洛's avatar
雪洛 已提交
75 76
**说明**

W
wanganxp 已提交
77 78
- 如果未进行实名认证,会跳转至实名认证页面进行实名认证,等待实名认证审核之后可以开通服务空间。若腾讯云实名认证提示身份证下已创建过多账户,则需要在腾讯云官网注销不用的账户。
- 创建服务空间可能需要几十秒的时间,可以在web控制台查看是否创建完成。
雪洛's avatar
雪洛 已提交
79
- 一个应用,可以在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)设置协作者(选择应用->设置项目成员),实现多人共同使用一个云服务空间。(需 HBuilderX 2.5.9+)需要注意的是目前协作者不可通过web控制台访问服务空间。
雪洛's avatar
雪洛 已提交
80

W
wanganxp 已提交
81
## 创建云函数
雪洛's avatar
雪洛 已提交
82

雪洛's avatar
雪洛 已提交
83
`uniCloud`项目创建并绑定服务空间后,开发者可以在`cloudfunctions`目录右键创建云函数(HBuilderX 3.0以上版本请在`uniCloud/cloudfunctions`目录右键)。
雪洛's avatar
雪洛 已提交
84

雪洛's avatar
雪洛 已提交
85
![新建云函数](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/unicloud-02.png)
雪洛's avatar
雪洛 已提交
86

W
wanganxp 已提交
87
创建后会以云函数名称为名生成一个特殊目录,该目录下自动生成index.js,是该云函数的入口文件,不可改名。如果该云函数还需要引入其他js,可在index.js入口文件中引用。
W
wanganxp 已提交
88

雪洛's avatar
雪洛 已提交
89 90
**注意**

W
wanganxp 已提交
91
- 不同项目使用同一个服务空间时,不可使用同名云函数,可以在uniCloud的web控制台手动删除重名云函数释放函数名。
W
wanganxp 已提交
92
- 在HBuilderX创建云函数时,如果新云函数与服务器上已存在同名云函数,会用新函数覆盖。
雪洛's avatar
雪洛 已提交
93 94
- 单个云函数大小限制为10M(包含node_modules)

W
wanganxp 已提交
95
## 编写云函数
雪洛's avatar
雪洛 已提交
96

W
wanganxp 已提交
97
云函数的语法,是在普通的Node.js基础上补充了uniCloud的专用API。可参考API开发文档编写,也可以直接新建项目时选择`hello uniCloud`模板体验。
W
wanganxp 已提交
98 99 100

HBuilderX为uniCloud开发提供了良好的语法提示和转到定义支持,对于代码中的API,选中并按下F1,也可以直接查看相应的文档。

W
wanganxp 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113
如下为一个云函数示例
```javascript
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
	//event为客户端上传的参数
	const collection = db.collection('unicloud-test') // 获取表'unicloud-test'的集合对象
	const res = await collection.limit(10).get() // 获取表中的10条数据,结果为json格式
	return res // 返回json给客户端
};

```

雪洛's avatar
雪洛 已提交
114
## 运行和调试云函数@rundebug
雪洛's avatar
雪洛 已提交
115

W
wanganxp 已提交
116 117 118
编写云函数后,在项目管理器里右键点击该云函数的目录,在弹出菜单中可选择“本地运行云函数”、“上传部署云函数”、“上传并运行云函数”。

如果使用`HBuilderX 3.0.0`及以上版本还可以使用客户端连接本地云函数的方式,不同于上面三种,客户端连接本地云函数需要在运行起来的客户端对应的HBuilderX控制台上切换连接云端还是本地云函数,如下图
雪洛's avatar
雪洛 已提交
119 120

![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/28f84f90-3f69-11eb-8ff1-d5dcf8779628.jpg)
雪洛's avatar
雪洛 已提交
121

W
wanganxp 已提交
122
- 上传部署云函数:将云函数部署到uniCloud服务空间,不会运行。(快捷键Ctrl+u)
雪洛's avatar
雪洛 已提交
123
- 上传并运行云函数:先上传云函数,并在云端立即执行该云函数。在部署后同时运行,并打印日志出来。有延时,调试时不如本地运行云函数快捷。
W
wanganxp 已提交
124 125
- 本地运行云函数:在HBuilderX自带的node环境中运行选中的云函数。云函数连接的数据库和云存储,仍然在云端。(快捷键Ctrl+u)(从HBuilderX 2.8.1起支持)
- 客户端连接本地云函数:开启一个uniCloud本地服务,运行前端项目时在HBuilderX控制台可切换访问云端云函数还是本地云函数。(从HBuilderX 3.0.0起支持)
W
wanganxp 已提交
126

雪洛's avatar
雪洛 已提交
127
**模式差异**
雪洛's avatar
雪洛 已提交
128

雪洛's avatar
雪洛 已提交
129
**上传部署云函数**
W
wanganxp 已提交
130

雪洛's avatar
雪洛 已提交
131
云函数会被上传到服务空间,不会执行。如果要测试需使用客户端调用此云函数。
W
wanganxp 已提交
132

雪洛's avatar
雪洛 已提交
133
**上传并运行云函数**
雪洛's avatar
雪洛 已提交
134

雪洛's avatar
雪洛 已提交
135 136 137 138 139 140
云函数会被上传到服务空间,然后执行一次,可以在HBuilderX内uniCloud控制台看到结果及日志。如果有配置运行测试参数,会使用配置的参数调用云函数。

上传并运行使用的资源全部都是云端资源。包括云函数、数据库、云存储。

**本地运行云函数**

W
wanganxp 已提交
141 142 143
云函数不会被上传到服务空间,只在本地运行,可以在HBuilderX内uniCloud控制台看到结果及日志。

这是一种独立测试云函数的方法,如需要配置前端参数,则需配置json文件,[详见](/uniCloud/quickstart?id=runparam)
雪洛's avatar
雪洛 已提交
144 145 146 147 148 149 150

本地运行时只有当前云函数会使用本地的。如果在当前云函数内使用callFunction调用其他云函数会调用云端已部署的云函数,云存储、数据库均会使用云端数据。

**客户端连接本地云函数**

云函数不会被上传到服务空间,由本地调试服务调用云函数,可以在HBuilderX内uniCloud控制台看到结果及日志。

W
wanganxp 已提交
151 152 153
这是一种前后端联调的方法,可较大提升联调效率。

使用clientDB操作数据库时,表结构(schema.json文件)、扩展校验函数、clientDB-actions均使用本地项目下的代码,但所操作的数据依然是云端数据,索引也是以云端为准。
雪洛's avatar
雪洛 已提交
154

W
wanganxp 已提交
155 156 157
客户端连接本地云函数时云函数内的callFunction也会调用本地云函数,除非目标云函数是插件市场售卖的加密云函数,此时仍会调用云端。

虽然云函数、数据库schema、validatefunction在本地了,但云存储、数据库的数据和索引,仍然在云端。也就是开发机不能纯脱线开发。
雪洛's avatar
雪洛 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170

**注意**

- HBuilderX 3.0.0版本云函数目录有调整,请参考【链接待补充】

### 上传并运行云函数@uploadandrun

在项目管理器里右键点击云函数的目录,在弹出菜单中可选择“上传并运行云函数”。此外也可以打开此目录下的文件然后使用快捷键`Ctrl+r`,在弹出菜单中选择“上传并运行云函数”。上传并运行时会自动带上配置的运行测试参数。

如需配置运行测试参数请参考:[配置运行测试参数](https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam)

### 客户端连接本地云函数@calllocalfunction

W
wanganxp 已提交
171
`HBuilderX 3.0.0`起支持客户端连接本地云函数,由客户端访问本地调试服务调用云函数。方便前后端联调、方便schema联调。
雪洛's avatar
雪洛 已提交
172

W
wanganxp 已提交
173 174 175
**只支持本地运行打日志。暂不支持断点debug**

**虽然云函数、数据库schema、validatefunction在本地,但云存储、数据库的数据和索引,仍然在云端。也就是开发机不能完全脱线开发。只是代码可以在本地写,免上传就能联调。**
雪洛's avatar
雪洛 已提交
176 177 178 179 180 181

**使用方式**

运行客户端后可以在HBuilderX控制台切换是连接本地云函数还是云端云函数,如下图所示

![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/28f84f90-3f69-11eb-8ff1-d5dcf8779628.jpg)
W
wanganxp 已提交
182

雪洛's avatar
雪洛 已提交
183
**日志查看**
W
wanganxp 已提交
184

雪洛's avatar
雪洛 已提交
185
切换为本地云函数之后客户端的callFunction会直接调用cloudfunctions目录下的云函数。此时云函数的日志会在HBuilderX uniCloud控制台打印。如下图
雪洛's avatar
雪洛 已提交
186

雪洛's avatar
雪洛 已提交
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b6f52050-3f7a-11eb-8a36-ebb87efcf8c0.jpg)

切换连接云端云函数还是本地云函数之后会在项目下的`.hbuilderx`目录创建一个`launch.json`文件。关于此文件的说明请参考:【链接待补充】

一个典型的`launch.json`是如下形式的(无需手动创建此文件)

```js
{
    "version": "0.0.1",
    "configurations": [
      {
        "app-plus": {
          "launchtype" : "local" // app平台连接本地云函数
        },
        "default": {
          "launchtype" : "remote" // 未配置的平台连接云端云函数
        },
        "h5": {
          "launchtype" : "remote" // h5平台连接云端云函数
        },
        "provider" : "aliyun", // 如果项目仅关联一个服务空间无需此参数
        "type" : "uniCloud" // 标识此项配置为uniCloud配置,必填
     }
    ]
}

```

**注意事项**

W
wanganxp 已提交
217 218 219 220 221 222 223
- 虽然云函数、数据库schema、validatefunction在本地,但云存储、数据库的数据和索引,仍然在云端。也就是开发机不能完全脱线开发。只是代码可以在本地写,免上传就能联调。
- 切换云端、本地,无需重新运行客户端
- 不同平台可以有不同的配置。但同一平台,如安卓和iOS都是app-plus,则对应着同一个配置,或者两台安卓手机也只能有一个配置
- 客户端在每次发送数据库请求之前,会发送一条请求到本地调试服务,本地服务会根据当前用户选择来通知客户端该访问本地云函数还是云端云函数
- 客户端连接本地云函数时,云函数内的callFunction也会调用本地云函数。除非目标云函数是插件市场售卖的加密云函数,此时不会调用本地,仍会调用云端
- 如果云函数或云函数依赖的公共模块有加密(在插件市场销售),则会忽略本地配置,请求云端已部署的云函数。请留意控制台输出
- 发送clientDB请求时,如果使用了加密的action(在插件市场销售),当前请求会使用云端已部署资源而不是本地资源(包括schema、validateFunction、action),请留意控制台输出
雪洛's avatar
雪洛 已提交
224
- 如果项目内关联了两个服务空间,需要在`.hbuilderx/launch.json`内配置provider参数指定哪个服务空间使用本地调试
W
wanganxp 已提交
225
- 当前项目运行的所有客户端都停止运行时,对本项目的调试服务会关闭,已经运行到手机的客户端将无法连接本地云函数,这时会自动切换为连接云端云函数
雪洛's avatar
雪洛 已提交
226 227 228
- 在h5端network面板的会看到一些`Request Method: OPTION`的请求,这些是跨域预检请求,忽略即可。请参考:[HTTP 的 OPTIONS 方法](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/OPTIONS)

### 本地运行云函数@runlocal
雪洛's avatar
雪洛 已提交
229

W
wanganxp 已提交
230 231
自2.8.1版本起HBuilderX支持云函数本地运行,调试云函数更加方便快捷。此外还可以方便批量导入数据及文件,不再受云函数超时限制。

W
wanganxp 已提交
232
**目前只支持本地运行打日志。暂不支持断点debug**
雪洛's avatar
雪洛 已提交
233

雪洛's avatar
雪洛 已提交
234
**使用方式**
雪洛's avatar
雪洛 已提交
235

雪洛's avatar
雪洛 已提交
236
在项目管理器选择要本地运行的云函数,右键选择本地运行。或者打开这个云函数内的文件,按`ctrl+r`回车。
雪洛's avatar
雪洛 已提交
237 238

- 如果没有安装本地运行插件,按照提示安装即可
雪洛's avatar
雪洛 已提交
239
- 如需配置运行参数请参考:[配置运行测试参数](https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam)
雪洛's avatar
雪洛 已提交
240 241 242

![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-local-1.jpg)

雪洛's avatar
雪洛 已提交
243 244 245 246 247 248 249 250 251 252 253 254 255 256
在云函数编辑器里,按`Ctrl+r`运行快捷键(或点工具栏的运行),可看到运行云函数的若干菜单。`Ctrl+r`然后回车或选`0`,即可高效的在控制台看到运行结果和日志输出。如下图所示:

![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-run-function.png)

云函数目前无法断点debug,只能打印`console.log`看日志。

![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-run-function-2.png)

运行云函数时,如需要给云函数传参,除了在前端传参外,在调试阶段,可以通过配置json文件来传测试参数。

在云函数对应的目录右键可以配置运行测试参数,如下图,选择之后会生成一个形如`${函数名}.param.json`的文件,此文件内容会在云函数`上传并运行`以及`本地运行云函数`时作为参数传入云函数内。详细用法可参考:[配置运行测试参数](https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam)

## 调用本地云函数注意事项

W
wanganxp 已提交
257
**本章节注意事项包括本地运行云函数、客户端连接本地云函数**
雪洛's avatar
雪洛 已提交
258

雪洛's avatar
雪洛 已提交
259 260 261 262 263
**使用公用模块**

本地运行的云函数使用公用模块时需注意:

- 需要在云函数内执行`npm install ../common/xxx`安装公共模块,详细请参考[云函数公用模块](uniCloud/cf-common.md)
雪洛's avatar
雪洛 已提交
264
- 如果使用`HBuilderX 3.0.0`及以上版本,可以直接在云函数目录右键选择“管理公共模块依赖”进行公共模块的引入
雪洛's avatar
雪洛 已提交
265
- 如果使用到加密的公共模块则此云函数不可本地运行
雪洛's avatar
雪洛 已提交
266
- `HBuilderX 3.0.0`版本运行uniCloud项目时,uniCloud本地调试插件会自动进行云函数依赖安装(包括公共模块和package.json里面的其他依赖)
雪洛's avatar
雪洛 已提交
267

雪洛's avatar
雪洛 已提交
268 269
**时区问题**

W
wanganxp 已提交
270
uniCloud云端的云函数使用的时区是utc+0,本地运行时使用的是本机时间,中国一般是+8。在使用“时间戳”时两者没有差异,但如果要获取年、月、日、小时要注意时区的差异。
雪洛's avatar
雪洛 已提交
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287

以下方式可以获取指定时区的年、月、日、小时,可以参考一下

```js
// 获取偏移后的Date对象,例如utc+x时offset就传x
function getOffsetDate (offset) {
  return new Date(
    Date.now() + (new Date().getTimezoneOffset() + (offset || 0) * 60) * 60000
  )
}

// 获取utc+8的小时数
const hour = getOffsetDate(8).getHours()

// 获取时间戳无需使用此方式utc+0时间戳是与utc+8时间戳一致的
```

W
wanganxp 已提交
288 289
推荐使用`<uni-dateformat>`组件格式化显示日期,[详情](https://ext.dcloud.net.cn/plugin?id=3279)

雪洛's avatar
雪洛 已提交
290 291 292 293 294 295
**调用其他云函数**

“本地运行云函数”时云函数内callFunction会调用云端已部署的云函数

“客户端连接本地云函数时”云函数内callFunction会调用本地云函数

雪洛's avatar
雪洛 已提交
296 297 298 299
**数据与存储**

请务必注意云函数在本地运行时依然是连接的云端数据库与存储

W
wanganxp 已提交
300 301
云函数上传文件到云存储只有腾讯云支持。当然也可以在前端直接上传文件,此时阿里云腾讯云均支持。

雪洛's avatar
雪洛 已提交
302 303 304 305
**Nodejs版本**

服务空间所使用的nodejs版本为8.9,本地运行时使用的本地nodejs可能与服务空间的nodejs版本并不一致,在本地测试之后部署到云端也务必测试一下兼容性。

雪洛's avatar
雪洛 已提交
306
## 运行云函数时配置运行测试参数@runparam
W
wanganxp 已提交
307 308 309 310 311 312 313

在云函数的上传运行菜单或右键菜单中,有`配置运行测试参数`的功能。

可以打开一个json,配置运行参数。配置该json后,运行云函数时会将该json作为云函数调用的上行参数处理,可以在云函数中接收到参数。

![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-run-function-1.png)

雪洛's avatar
雪洛 已提交
314 315
在云函数目录右键运行云函数,也可以在云函数编辑器里,按`Ctrl+r`运行快捷键,或点工具栏的运行

雪洛's avatar
雪洛 已提交
316
![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/run-function-with-param-1.jpg)
雪洛's avatar
雪洛 已提交
317 318 319

此时云函数运行会携带所配置的运行参数

雪洛's avatar
雪洛 已提交
320
![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/run-function-with-param-2.jpg)
雪洛's avatar
雪洛 已提交
321

雪洛's avatar
雪洛 已提交
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
**模拟客户端类型**

如果需要模拟客户端类型可以在运行参数内添加clientInfo字段

```
{
  "otherParam": "***",
  "clientInfo":{
    CLIENT_SDK_VERSION: "1.0.0"
    OS: "ios" // 系统类型 ios、android
    PLATFORM: "h5" // 客户端类型 app-plus、h5、mp-weixin、mp-alipay等
  }
}
```

W
wanganxp 已提交
337
## 手机端调用云函数
雪洛's avatar
雪洛 已提交
338

W
wanganxp 已提交
339
在uni-app的前端代码中,通过`uniCloud.callFunction`方法调用云函数。详见[callFunction文档](https://uniapp.dcloud.io/uniCloud/functions?id=callfunction)
W
wanganxp 已提交
340

W
wanganxp 已提交
341
如下代码中,调用了名为`test`的云函数,并发送了`data`的json数据作为上行参数。
W
wanganxp 已提交
342
```javascript
W
wanganxp 已提交
343
// promise方式
W
wanganxp 已提交
344
uniCloud.callFunction({
W
wanganxp 已提交
345 346 347 348 349 350 351 352 353 354 355 356 357
    name: 'test',
    data: { a: 1 }
  })
  .then(res => {});

// callback方式
uniCloud.callFunction({
	name: 'test',
	data: { a: 1 },
	success(){},
	fail(){},
	complete(){}
});
W
wanganxp 已提交
358 359
```

雪洛's avatar
雪洛 已提交
360 361
## 手机端看日志

W
wanganxp 已提交
362
uni-app运行在HBuilderX内置浏览器和App环境时,在HBuilderX的控制台中,除了可以看普通手机端日志外,还可以直接看到云端的云函数里打印的console.log日志。
雪洛's avatar
雪洛 已提交
363

W
wanganxp 已提交
364
**示例**
雪洛's avatar
雪洛 已提交
365 366 367

所执行云函数代码

W
wanganxp 已提交
368
```javascript
雪洛's avatar
雪洛 已提交
369 370 371 372 373 374 375 376 377 378 379
'use strict';
exports.main = async (event, context) => {
	console.log('------------');
	console.log('云函数日志输出');
	console.log('------------');
	return {
		action: 'log demo'
	}
};
```

雪洛's avatar
雪洛 已提交
380
H5端HBuilderX内置浏览器输出云函数日志,如下图所示(注意:日志在HBuilderX控制台输出):
雪洛's avatar
雪洛 已提交
381

雪洛's avatar
雪洛 已提交
382
![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-function-log-h5.jpg)
雪洛's avatar
雪洛 已提交
383

W
wanganxp 已提交
384
App端真机调试输出云函数日志,如下图所示:
W
wanganxp 已提交
385

W
wanganxp 已提交
386
![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-function-log.png)
W
wanganxp 已提交
387

雪洛's avatar
雪洛 已提交
388

W
wanganxp 已提交
389
- 如运行到小程序开发工具或外部浏览器,仅能在这些软件的调试控制台查看本地日志,不包含云函数里的console.log。
雪洛's avatar
雪洛 已提交
390

W
wanganxp 已提交
391
uniCloud的[web控制台](https://unicloud.dcloud.net.cn/)可以查看线上云函数的所有运行日志,而不仅仅是开发时的运行日志。
雪洛's avatar
雪洛 已提交
392

W
wanganxp 已提交
393 394 395 396 397
## clientDB - 前端直接操作数据库

uniCloud支持云函数,但其实大多数场景下并不需要写云函数,可以通过clientDB直接操作云数据库。

文档另见:[clientDB](https://uniapp.dcloud.io/uniCloud/database)
雪洛's avatar
雪洛 已提交
398

W
wanganxp 已提交
399
## 小程序中使用uniCloud的白名单配置
雪洛's avatar
雪洛 已提交
400

W
wanganxp 已提交
401 402 403 404 405
各家小程序平台,均要求在小程序管理后台配置小程序应用的联网服务器域名,否则无法联网。

使用uniCloud后,开发者将不再需要自己购买、备案域名,直接将uniCloud的域名填写在小程序管理后台即可。

根据下表,在小程序管理后台设置request合法域名、uploadFile合法域名(如没有上传文件业务,可不设置)。下表的域名均为阿里云或腾讯云自有域名,并非DCloud所属域名。
雪洛's avatar
雪洛 已提交
406

雪洛's avatar
雪洛 已提交
407 408 409 410
|服务提供商	|request合法域名			|uploadFile合法域名					|download合法域名|
|:-:		|:-:						|:-:								|:-:|
|阿里云		|api.bspapp.com				|bsppub.oss-cn-shanghai.aliyuncs.com|需要从云存储下载文件的时候才需要配置,不同服务空间域名不同,可以在web控制台查看文件详情里面看到|
|腾讯云		|tcb-api.tencentcloudapi.com|cos.ap-shanghai.myqcloud.com		|需要从云存储下载文件的时候才需要配置,不同服务空间域名不同,可以在web控制台查看文件详情里面看到|
雪洛's avatar
雪洛 已提交
411

雪洛's avatar
雪洛 已提交
412
**如果需要用uni.request请求云存储内的文件,需要将云存储域名(即上表中的download合法域名)配置到request合法域名内**
雪洛's avatar
雪洛 已提交
413

W
wanganxp 已提交
414 415
小程序开发工具的真机预览功能,必须添加上述域名白名单,否则无法调用云函数。模拟器的PC端预览、真机调试不受此影响。

雪洛's avatar
雪洛 已提交
416
如果遇到正确配置了合法域名但是依然报`url not in domain list`,请尝试删除手机上的小程序、清理小程序所在的客户端缓存、重启对应的小程序开发工具后重试
雪洛's avatar
雪洛 已提交
417

W
wanganxp 已提交
418
## H5中使用uniCloud的跨域处理@useinh5
雪洛's avatar
雪洛 已提交
419

W
wanganxp 已提交
420
H5前端js访问云函数,涉及跨域问题,导致前端js无法连接云函数服务器。处理方式如下:。
W
wanganxp 已提交
421

W
wanganxp 已提交
422 423
- 运行到H5端时,使用HBuilderX内置浏览器,可以忽略跨域问题(mac版需2.5.10+)。
- 发行到H5端时,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。(在`cloudfunctions`目录右键可打开uniCloud后台)
雪洛's avatar
雪洛 已提交
424

雪洛's avatar
雪洛 已提交
425 426
> 注意跨域配置需要带上端口信息。例如:前端页面运行于:www.xxx.com:5001,跨域配置内配置:www.xxx.com不会对此页面生效,需要配置为:

雪洛's avatar
雪洛 已提交
427 428
**uniCloud后台配置安全域名:**

雪洛's avatar
雪洛 已提交
429
![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-add-domain.png)
雪洛's avatar
雪洛 已提交
430

W
wanganxp 已提交
431
- 如果运行时,想使用外部浏览器运行,方案如下:
雪洛's avatar
雪洛 已提交
432
  * 方式1:在uniCloud web控制台绑定测试期的地址为安全域名,如配置:localhost:8080、192.168.0.1:8080(建议直接使用内置浏览器测试)
W
wanganxp 已提交
433 434
  * 方式2:在外部浏览器安装跨域插件,详见:[https://ask.dcloud.net.cn/article/35267](https://ask.dcloud.net.cn/article/35267)。要跨域的地址,详见上述文档中小程序配置安全域名章节。

雪洛's avatar
雪洛 已提交
435 436 437 438 439
## cli项目中使用uniCloud

如果要在cli项目中使用uniCloud,可以参考以下步骤

1. 将cli项目导入`HBuilderX`
雪洛's avatar
雪洛 已提交
440
2. 在项目根目录(src同级)创建`cloudfunctions-aliyun`或者`cloudfunctions-tcb`目录(HBuilderX 3.0以上版本请创建`uniCloud-aliyun``uniCloud-tcb`目录)
雪洛's avatar
雪洛 已提交
441 442 443 444 445 446
3. 打开`src/manifest.json`,在`基础配置-->uni-app应用标示`处点击`重新获取`
4. 在步骤2创建的目录右键关联服务空间
5. 完成

**注意**

W
wanganxp 已提交
447
- 运行与发行云函数只能使用HBuilderX的菜单,不可使用`package.json`内的命令
雪洛's avatar
雪洛 已提交
448
- 如果HBuilderX菜单运行不能满足需求可以考虑自行初始化服务空间[服务空间初始化](uniCloud/init.md)
W
wanganxp 已提交
449 450 451

**H5前端页面部署问题**

W
wanganxp 已提交
452
uniCloud支持前端页面部署,在HBuilderX中点发行菜单,生成H5,将生成的前端文件部署在uniCloud的前端网页托管内即可[详情参考](uniCloud/hosting.md)
W
wanganxp 已提交
453

雪洛's avatar
雪洛 已提交
454
需要注意的是你仍在[uniCloud web控制台](https://unicloud.dcloud.net.cn) 配置H5安全域名。
雪洛's avatar
雪洛 已提交
455

W
wanganxp 已提交
456

雪洛's avatar
雪洛 已提交
457

W
wanganxp 已提交
458 459
**Tips**
- web控制台网址:[https://unicloud.dcloud.net.cn](https://unicloud.dcloud.net.cn),在HX中对云函数目录点右键,或者在帮助菜单中,均有入口链接。
W
wanganxp 已提交
460
- 虽然uni-app支持vscode等其他ide开发,但因为uniCloud对安全性要求极高,仅支持使用HBuilderX开发。
雪洛's avatar
雪洛 已提交
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493

## web控制台@webcp

### 编辑数据库数据@editdb

#### 添加日期@editdb_date

在web控制台添加/修改数据时可以通过以下方式添加日期类型数据

<!-- {
  "create_date": {
    "$date": "2020-12-02 12:12:12" // 添加utc+8时区对应的日期对象作为create_date
  }
} -->

```js
{
  "create_date": {
    "$date": 1606910053154 // 添加此时间戳对应的日期对象作为create_date
  }
}
```

#### 添加地理位置点@editdb_geopoint

```js
// 将location字段设置为经度116、纬度38的地理位置点
{
  "location": {
    "type": "Point",
    "coordinates": [116,38]
  }
}
W
wanganxp 已提交
494
```