quickstart.md 9.7 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 10 11 12 13 14 15 16
  - 对于老的uni-app项目,也可以对项目点右键,菜单中选择“创建uniCloud云开发环境”
  - 新建uni-app项目的模板中,有一个`Hello uniCloud`项目模板,演示了各种云函数的使用。
  
  uniCloud云开发环境创建成功后,项目下会有一个带有云图标的特殊目录,名为“cloudfunctions”。

## 创建和绑定服务空间

项目环境建好后,需要为这个项目选择一个服务空间。如果开发者账户没有实名认证,首先需要实名认证。

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

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

  - 在云函数目录`cloudfunctions`右键菜单创建服务空间,会打开web控制台进行创建
雪洛's avatar
雪洛 已提交
22 23 24

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

W
wanganxp 已提交
25
  - 创建好服务空间后,对目录`cloudfunctions`点右键,菜单中点击`选择云服务空间`,绑定你之前创建的服务空间。
W
wanganxp 已提交
26
  
雪洛's avatar
雪洛 已提交
27 28
**说明**

W
wanganxp 已提交
29
- 如果未进行实名认证,会跳转至实名认证页面进行实名认证,等待实名认证审核之后可以开通服务空间
雪洛's avatar
雪洛 已提交
30
- 创建服务空间可能需要几分钟的时间,可以在控制台查看是否创建完成
W
wanganxp 已提交
31
- 目前只支持应用的所有者使用uniCloud,协作者无法使用
W
wanganxp 已提交
32
- 如果一个项目只对应一个服务空间,此时前端可直接使用这个服务空间。如果一个项目绑定了多个服务空间,则需要先做初始化,具体参考:[https://uniapp.dcloud.io/uniCloud/init](https://uniapp.dcloud.io/uniCloud/init)
雪洛's avatar
雪洛 已提交
33

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

W
wanganxp 已提交
36
`uniCloud`项目创建并绑定服务空间后,开发者可以在`cloudfunctions`目录右键创建云函数。
W
wanganxp 已提交
37
![新建云函数](http://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/unicloud-02.png)
雪洛's avatar
雪洛 已提交
38

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

雪洛's avatar
雪洛 已提交
41 42
**注意**

W
wanganxp 已提交
43 44
- 不同项目使用同一个服务空间时,不可使用同名云函数,可以在uniCloud的web控制台手动删除重名云函数释放函数名。
- 创建时目前版本不校验重名,如果新云函数与服务器上已存在同名云函数,会用新函数覆盖。请务必注意。后续会修复此问题。
雪洛's avatar
雪洛 已提交
45 46
- 单个云函数大小限制为10M(包含node_modules)

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

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

W
wanganxp 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64
如下为一个云函数示例
```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给客户端
};

```

W
wanganxp 已提交
65
## 运行和调试云函数
雪洛's avatar
雪洛 已提交
66 67
编写云函数后,在项目管理器里右键点击该云函数的目录,在弹出菜单中可选择“上传部署云函数”、“上传并运行测试云函数”。如下图所示:

W
wanganxp 已提交
68 69 70

前者仅完成部署,后者会在部署后同时运行,并打印日志出来。

W
wanganxp 已提交
71
在云函数编辑器里,按`Ctrl+r`运行快捷键,或点工具栏的运行,还会直接看到上传并运行云函数的快捷指令。`Ctrl+r`然后回车或选`0`,即可高效的在控制台看到运行结果和日志输出。
W
wanganxp 已提交
72

W
wanganxp 已提交
73
云函数目前无法断点debug,只能打印`console.log`看日志。
W
wanganxp 已提交
74

雪洛's avatar
雪洛 已提交
75 76 77 78
![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-run-function.png)

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

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

W
wanganxp 已提交
82
如下代码中,调用了名为`test`的云函数,并发送了`data`的json数据作为上行参数。
W
wanganxp 已提交
83
```javascript
W
wanganxp 已提交
84
// promise方式
W
wanganxp 已提交
85
uniCloud.callFunction({
W
wanganxp 已提交
86 87 88 89 90 91 92 93 94 95 96 97 98
    name: 'test',
    data: { a: 1 }
  })
  .then(res => {});

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

雪洛's avatar
雪洛 已提交
101 102
## 手机端看日志

W
wanganxp 已提交
103
uni-app运行在各端,均可查看手机端日志。额外的,在App真机运行模式下,在HBuilderX的自带控制台也会打印云函数输出的`console.log`
雪洛's avatar
雪洛 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

**App端真机调试输出云函数日志,如下图所示**

所执行云函数代码

```
'use strict';
exports.main = async (event, context) => {
	console.log('------------');
	console.log('云函数日志输出');
	console.log('------------');
	return {
		action: 'log demo'
	}
};
```

日志输出

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

W
wanganxp 已提交
125 126 127 128
- 运行到H5,需要在浏览器的控制台查看日志,但仅包含前端日志,不包含云函数内部的console.log。
- 运行到小程序,需要在小程序开发工具的控制台查看日志,但仅包含前端日志,不包含云函数内部的console.log。

目前uniCloud的web控制台还不能查看运行日志,后续会提供此功能。
W
wanganxp 已提交
129

雪洛's avatar
雪洛 已提交
130 131
## 小程序中使用uniCloud

W
wanganxp 已提交
132
小程序中使用uniCloud需要在相应的小程序管理后台设置request合法域名、uploadFile合法域名。这些域名均为阿里云或腾讯云自有域名,并非DCloud所属域名。
雪洛's avatar
雪洛 已提交
133 134 135 136 137

|服务提供商	|request合法域名|uploadFile合法域名									|
|:-:				|:-:						|:-:																|
|阿里云			|api.bspapp.com	|bsppub.oss-cn-shanghai.aliyuncs.com|

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

雪洛's avatar
雪洛 已提交
140
## H5中使用uniCloud
雪洛's avatar
雪洛 已提交
141

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

W
wanganxp 已提交
144
- 运行到H5端时,使用HBuilderX内置浏览器,可以忽略跨域问题(mac版需2.5.10+)。
雪洛's avatar
雪洛 已提交
145

W
wanganxp 已提交
146
- 发行到H5端时,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。(在`cloudfunctions`目录右键可打开uniCloud后台)
雪洛's avatar
雪洛 已提交
147 148 149

**uniCloud后台配置安全域名:**

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

W
wanganxp 已提交
152 153 154 155 156 157 158 159 160 161 162 163
- 如果运行时,想使用外部浏览器运行,方案如下:
  * 方式1:在uniCloud web控制台绑定测试期的地址为安全域名,如配置:localhost:8080、192.168.0.1:8080
  * 方式2:在外部浏览器安装跨域插件,详见:[https://ask.dcloud.net.cn/article/35267](https://ask.dcloud.net.cn/article/35267)。要跨域的地址,详见上述文档中小程序配置安全域名章节。


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

阿里云Serverless暂未支持H5前端页面部署,需开发者自行准备web服务器,在HBuilderX中点发行菜单,生成H5,将生成的前端文件部署在Nginx等web服务器下。

然后自行注册或使用已有域名,在域名服务商处处理好域名的解析,指向你的Nginx等服务器ip。

最后将该域名通过uniCloud后台配置为安全域名,即可在浏览器中访问。
雪洛's avatar
雪洛 已提交
164

W
wanganxp 已提交
165
**m3w.cn二级域名申请**
W
wanganxp 已提交
166

W
wanganxp 已提交
167
若为新冠抗疫需紧急上线H5,来不及注册域名,可申请使用DCloud提供的m3w.cn的二级域名,示例:[hellounicloud.m3w.cn](https://hellounicloud.m3w.cn) 。此时请使用你注册DCloud账户的邮箱向service@dcloud.io发邮件申请,提供你的appid、计划使用的二级域名名称、解析的ip地址、应用的使用用途。
雪洛's avatar
雪洛 已提交
168

雪洛's avatar
雪洛 已提交
169
## 使用db_init.json初始化项目数据库
雪洛's avatar
雪洛 已提交
170

雪洛's avatar
雪洛 已提交
171 172 173 174 175 176
`HBuilderX 2.5.11``uniCloud`提供了`db_init.json`来方便开发者快速进行数据库的初始化操作。

**使用说明**

-`cloudfucntions`目录右键即可创建`db_init.json`
-`db_init.json`上右键初始化数据库。
雪洛's avatar
雪洛 已提交
177 178 179 180 181

**db_init.json形式如下**

```
{
W
wanganxp 已提交
182 183 184 185 186 187 188
    "collection_test": { // 集合(表名)
        "data": [ // 数据
           {
                "_id": "da51bd8c5e37ac14099ea43a2505a1a5",
               "name": "tom"
           }
        ]
雪洛's avatar
雪洛 已提交
189 190
    }
}
雪洛's avatar
雪洛 已提交
191
```
雪洛's avatar
雪洛 已提交
192

W
wanganxp 已提交
193
**Bug&Tips**
W
wanganxp 已提交
194
- 阿里云的云函数的初次冷启动较慢,表现为某个云函数第一次被调用时联网时间较长,可能要5秒左右。第二次即可正常。并非每个手机用户都要经历一次冷启动,开发者运行过一次云函数,用户再连接时就不会经历冷启动。但长期不使用的云函数(15分钟),会被回收资源。回收后再调用云函数,仍然会经历一次冷启动。这个问题阿里云正在优化,会提供更好的方案。
W
wanganxp 已提交
195
- web控制台网址:[http://unicloud.dcloud.net.cn](http://unicloud.dcloud.net.cn),在HX中对云函数目录点右键,或者在帮助菜单中,均有入口链接。
雪洛's avatar
雪洛 已提交
196 197 198 199

<!-- **注意**
- 服务提供商为腾讯云时,需要开发者手动去管理控制台开启匿名登录[详情](/uniCloud/authentication#匿名登录) -->