client-sdk.md 13.1 KB
Newer Older
Q
qiang 已提交
1 2 3 4 5 6 7 8 9
# uniCloud客户端sdk

uniCloud分为客户端和云端两部分,有些接口名称相同,参数也相近,在此列举客户端sdk内可以使用的接口/属性,避免混淆


## API

客户端API列表

雪洛's avatar
雪洛 已提交
10 11
|API							|描述																			|
|--								|--																				|
12 13 14 15 16 17
|uniCloud.importObject()		|获取云对象引用以调用云对象接口 [详情](cloud-obj.md)					|
|uniCloud.callFunction()		|客户端调用云函数 [详情](cf-functions.md#clientcallfunction)		|
|uniCloud.database()			|客户端访问云数据库,获取云数据库对象引用 [详情](clientdb.md)			|
|uniCloud.uploadFile()			|客户端直接上传文件到云存储 [详情](storage.md#uploadfile)			|
|uniCloud.getTempFileURL()		|客户端获取云存储文件的临时路径 [详情](storage.md#gettempfileurl)	|
|uniCloud.chooseAndUploadFile()	|客户端选择文件并上传 [详情](storage.md#chooseanduploadfile)		|
雪洛's avatar
雪洛 已提交
18
|uniCloud.getCurrentUserInfo()	|获取当前用户信息 [详情](#client-getcurrentuserinfo)							|
19
|uniCloud.init()				|同时使用多个服务空间时初始化额外服务空间 [详情](init.md)				|
雪洛's avatar
雪洛 已提交
20 21
|uniCloud.addInterceptor()		|新增拦截器 [详情](#add-interceptor)											|
|uniCloud.removeInterceptor()	|移除拦截器 [详情](#remove-interceptor)											|
雪洛's avatar
雪洛 已提交
22
|uniCloud.interceptObject()	|拦截云对象请求 [详情](#intercept-object)											|
雪洛's avatar
雪洛 已提交
23 24 25 26 27 28
|uniCloud.onResponse()			|监听服务端(云函数、云对象、clientDB)响应 [详情](#on-response)				|
|uniCloud.offResponse()			|移除监听服务端(云函数、云对象、clientDB)响应 [详情](#off-response)			|
|uniCloud.onNeedLogin()			|监听需要登录事件 [详情](#on-need-login)										|
|uniCloud.offNeedLogin()		|移除监听需要登录事件 [详情](#off-need-login)									|
|uniCloud.onRefreshToken()		|监听token更新事件 [详情](#on-refresh-token)									|
|uniCloud.offRefreshToken()		|移除监听token更新事件 [详情](#off-refresh-token)								|
雪洛's avatar
雪洛 已提交
29
|uniCloud.initSecureNetworkByWeixin()		|在微信小程序安全网络请求发送之前与云函数握手 [详情](#init-secure-network-by-weixin)								|
Q
qiang 已提交
30 31 32 33 34 35 36

### 获取当前用户信息getCurrentUserInfo@client-getcurrentuserinfo

> HBuilderX 3.1.0+

解析客户端token获取用户信息。常用于在前端判断当前登录的用户状态和用户权限,比如根据不同的权限显示隐藏某些按钮。

雪洛's avatar
雪洛 已提交
37
**注意**
Q
qiang 已提交
38

雪洛's avatar
雪洛 已提交
39
- 此接口不会发送网络请求,**此接口仅仅是客户端接口,不校验token的合法性以及是否过期**
雪洛's avatar
雪洛 已提交
40
- 需要搭配uni-id使用并要求客户端必须将token存储在storage内的`uni_id_token`
41
- 如需获取role、permission需要将角色权限缓存在token内,此功能自uni-id 3.0.0 或 uni-id-common中默认开启
Q
qiang 已提交
42 43 44 45 46 47 48

用法:`uniCloud.getCurrentUserInfo()`

该方法为同步方法。

**响应参数**

雪洛's avatar
雪洛 已提交
49 50 51
| 字段			| 类型	| 说明									|
| ---			| ---	| ---									|
| uid			| Number|当前用户uid							|
雪洛's avatar
雪洛 已提交
52
| role			| Array	|用户角色列表。admin用户返回["admin"]	|
雪洛's avatar
雪洛 已提交
53 54
| permission	| Array	|用户权限列表。注意admin角色此数组为空	|
| tokenExpired	| Number|token过期时间							|
Q
qiang 已提交
55 56 57 58 59 60 61

未能获取用户信息时返回以下结果

```js
{
  uid: null,
  role: [],
雪洛's avatar
雪洛 已提交
62 63
  permission: [],
  tokenExpired: 0
Q
qiang 已提交
64 65 66 67 68 69 70 71 72 73 74 75
}
```

**示例**
```js
console.log(uniCloud.getCurrentUserInfo().role.indexOf('admin')>-1); // 如果是admin用户的话,打印结果为true
```

### 新增拦截器@add-interceptor

> 新增于HBuilderX 3.1.20

雪洛's avatar
雪洛 已提交
76
接口形式:`uniCloud.addInterceptor(String apiName, Object interceptor)`
Q
qiang 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89

**平台兼容性**

|阿里云	|腾讯云	|
|----		|----		|
|√			|√			|


**入参说明**

| 字段					| 类型	| 必填| 说明																												|
| ---						| ---		| ---	| ---																													|
| apiName				| string| 是	| 要拦截的Api名称,可选值:callFunction、database、uploadFile	|
雪洛's avatar
雪洛 已提交
90
| interceptor| object| 是	| 要添加的拦截器																							|
Q
qiang 已提交
91

雪洛's avatar
雪洛 已提交
92
**interceptor参数说明**
Q
qiang 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

|参数名		|类型			|必填	|默认值	|说明					|平台差异说明	|
|---			|---			|---	|---		|---					|---					|
|invoke		|Function	|否		|				|拦截前触发		|							|
|success	|Function	|否		|				|成功回调拦截	|							|
|fail			|Function	|否		|				|失败回调拦截	|							|
|complete	|Function	|否		|				|完成回调拦截	|							|

示例

```js
uniCloud.addInterceptor('callFunction', {
  invoke(param) {
    // param为拦截Api的参数 例 {name: 'functionName', data: {'functionParam1': 1, 'functionParam2': 2}}
    // 此处返回错误可终止api执行
  },
  success(res) {
    // res为callFunction的返回值,此处可以对返回值进行修改
  },
  fail(err) {
    // err为callFunction抛出的错误
  },
  complete(res){
    // complete内res为上面的res或err
  }
})
```

### 移除拦截器@remove-interceptor

> 新增于HBuilderX 3.1.20

雪洛's avatar
雪洛 已提交
125
接口形式:`uniCloud.removeInterceptor(String apiName, Object interceptor)`
Q
qiang 已提交
126 127 128 129 130 131

**入参说明**

| 字段					| 类型	| 必填| 说明																												|
| ---						| ---		| ---	| ---																													|
| apiName				| string| 是	| 要拦截的Api名称,可选值:callFunction、database、uploadFile	|
雪洛's avatar
雪洛 已提交
132
| interceptor| object| 是	| 要移除的拦截器,选填,不传递此参数时移除此Api所有拦截器			|
Q
qiang 已提交
133

雪洛's avatar
雪洛 已提交
134
**interceptor参数说明**
Q
qiang 已提交
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171

|参数名		|类型			|必填	|默认值	|说明					|平台差异说明	|
|---			|---			|---	|---		|---					|---					|
|invoke		|Function	|否		|				|拦截前触发		|							|
|success	|Function	|否		|				|成功回调拦截	|							|
|fail			|Function	|否		|				|失败回调拦截	|							|
|complete	|Function	|否		|				|完成回调拦截	|							|

**注意:**

- 要移除的拦截器内方法需和添加的方法一致才可以移除,详情见下方示例

```js
// 错误用法,无法移除invoke拦截器
uniCloud.addInterceptor('callFunction', {
  invoke(param) {
    console.log('callFunction invoked, with param:',param)
  }
})
uniCloud.removeInterceptor('callFunction', {
  invoke(param) {
    console.log('callFunction invoked, with param:',param)
  }
})

// 正确用法
function invokeInterceptor(param) {
  console.log('callFunction invoked, with param:',param)
}
uniCloud.addInterceptor('callFunction', {
  invoke: invokeInterceptor
})
uniCloud.removeInterceptor('callFunction', {
  invoke: invokeInterceptor
})
```

雪洛's avatar
雪洛 已提交
172
### 拦截云对象请求@intercept-object
雪洛's avatar
雪洛 已提交
173 174 175 176 177 178 179 180 181 182 183 184 185 186 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 217 218 219 220

> 新增于HBuilderX 3.5.5

接口形式:`uniCloud.interceptObject(Object interceptor)`

**interceptor参数说明**

|参数名		|类型			|必填	|默认值	|说明					|平台差异说明	|
|---			|---			|---	|---		|---					|---					|
|invoke		|Function	|否		|				|拦截前触发		|							|
|success	|Function	|否		|				|成功回调拦截	|							|
|fail			|Function	|否		|				|失败回调拦截	|							|
|complete	|Function	|否		|				|完成回调拦截	|							|

**invoke**拦截器内将会收到以下形式的参数

```js
{
  objectName: "", // 云对象名称
  methodName: "", // 云对象的方法名称
  params: [] // 参数列表
}
```

**success**拦截器内将会收到以下形式的参数

```js
{
  objectName: "", // 云对象名称
  methodName: "", // 云对象的方法名称
  params: [], // 参数列表
  result: {} // 云对象响应结果
}
```

**fail**拦截器内将会收到以下形式的参数

```js
{
  objectName: "", // 云对象名称
  methodName: "", // 云对象的方法名称
  params: [], // 参数列表
  error: new Error() // 错误对象
}
```

**complete**拦截器内将会收到success或fail拦截器相同的参数,具体以云函数是否执行成功为准

雪洛's avatar
雪洛 已提交
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
### 监听云端响应@on-response

> 新增于HBuilderX 3.4.13

用于监听云函数、云对象、clientDB的请求响应

代码示例:

```js
uniCloud.onResponse(function(event) {
	// event格式见下方说明
})
```

**响应格式**

```js
interface OnResponseEvent {
	type: 'cloudobject' | 'cloudfunctions' | 'clientdb',
	content: {} // content同云对象方法、云函数、clientDB请求的返回结果或错误对象
}
```

**以调用云对象方法为例**

```js
uniCloud.onResponse(function(e){
	console.log(e)
})
const todo = uniCloud.importObject('todo')
const res = await to.add('todo title', 'todo content')
```

上述代码中打印的e格式如下

```js
// 成功响应
e = {
	type: 'cloudobject',
	content: { // content内容和上方代码块中的res一致
		errCode: 0
	}
}

// 失败响应
e = {
	type: 'cloudobject',
	content: {
		errCode: 'invalid-todo-title',
		errMsg: 'xxx'
	}
}
```

可以通过判断content内是否有真值的errCode判断是失败还是成功的响应

```js
uniCloud.onResponse(function(e){
	if(e.content.errCode) {
		console.log('请求出错')
	}
})
```

### 移除云端响应的监听@off-response

> 新增于HBuilderX 3.4.13

用于移除onResponse添加的监听器

**注意**

- 要移除的监听内方法需和添加的方法一致才可以移除,详情见下方示例

```js
// 错误用法,无法移除监听
uniCloud.onResponse(function(e) {
	console.log(e)
})
uniCloud.offResponse(function(e) {
	console.log(e)
})

// 正确用法
function logResponse(e) {
	console.log(e)
}
uniCloud.onResponse(logResponse)
uniCloud.offResponse(logResponse)
```

雪洛's avatar
雪洛 已提交
312 313 314 315 316

### 监听需要登录事件@on-need-login

> 新增于HBuilderX 3.5.0

317
用于监听客户端需要登录事件,此接口需要搭配uniIdRouter使用,参考:[uniIdRouter](uni-id-summary.md#uni-id-router)
雪洛's avatar
雪洛 已提交
318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338

代码示例:

```js
uniCloud.onNeedLogin(function(event) {
	// event格式见下方说明
})
```

**响应格式**

```js
interface OnNeedLoginEvent {
	errCode: number | string,
	errMsg: string,
	uniIdRedirectUrl: string // 触发onNeedLogin页面前的页面地址(包含路径和参数的完整页面地址)
}
```

**注意**

雪洛's avatar
雪洛 已提交
339
- 开发者自定监听onNeedLogin事件后,uniIdRouter的自动跳转登录页面功能会禁用,由开发者在`onNeedLogin`内自行处理跳转
雪洛's avatar
雪洛 已提交
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391

### 移除需要登录事件的监听@off-need-login

> 新增于HBuilderX 3.5.0

**注意**

- 要移除的监听内方法需和添加的方法一致才可以移除,详情见下方示例

```js
// 错误用法,无法移除监听
uniCloud.onNeedLogin(function(e) {
	console.log(e)
})
uniCloud.offNeedLogin(function(e) {
	console.log(e)
})

// 正确用法
function log(e) {
	console.log(e)
}
uniCloud.onNeedLogin(log)
uniCloud.offNeedLogin(log)
```


### 监听token刷新事件@on-refresh-token

> 新增于HBuilderX 3.5.0

用于监听客户端token刷新事件,包括云对象返回newToken时自动更新token及clientDB自动更新token,注意uni-id-co登录返回的token也会触发此事件

代码示例:

```js
uniCloud.onRefreshToken(function(event) {
	// event格式见下方说明
})
```

**响应格式**

```js
interface OnRefreshTokenEvent {
	token: string,
	tokenExpired: number
}
```

**注意**

雪洛's avatar
雪洛 已提交
392
- 开发者自定监听onNeedLogin事件后,uniIdRouter的自动跳转登录页面功能会禁用,由开发者在`onNeedLogin`内自行处理跳转
雪洛's avatar
雪洛 已提交
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418

### 移除需要登录事件的监听@off-need-login

> 新增于HBuilderX 3.5.0

**注意**

- 要移除的监听内方法需和添加的方法一致才可以移除,详情见下方示例

```js
// 错误用法,无法移除监听
uniCloud.onNeedLogin(function(e) {
	console.log(e)
})
uniCloud.offNeedLogin(function(e) {
	console.log(e)
})

// 正确用法
function log(e) {
	console.log(e)
}
uniCloud.onNeedLogin(log)
uniCloud.offNeedLogin(log)
```

雪洛's avatar
雪洛 已提交
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457
### 微信小程序安全网络初始化@init-secure-network-by-weixin

> 新增于 3.6.8

安全网络相关文档请参考:[安全网络](secure-network.md)

**参数**

|参数							|类型		|必填	|默认值	|说明																				|
|---							|---		|---	|---		|---																				|
|callLoginByWeixin|boolean|否		|false	|是否在安全网络初始化同时执行一次uni-id-co的微信登录|

**示例**

```js
// App.vue
<script>
  export default {
    onLaunch: async function() {
      // #ifdef MP-WEIXIN
      const res = await uniCloud.initSecureNetworkByWeixin({
        callLoginByWeixin: true
      })
      // #endif
      console.log('initSecureNetworkByWeixin', res);
      console.log('App Launch')
    }
  }
</script>

<style>
</style>
```

**注意**

- 发送安全网络请求前uniCloud客户端sdk会判断是否完成初始化,如未完成会等待完成后再发送安全网络请求。
- 需要确保安全网络请求在此方法调用后执行

Q
qiang 已提交
458 459 460 461 462 463
## 属性

### 获取当前uniCloud实例的服务商

用法:`uniCloud.config.provider`

雪洛's avatar
雪洛 已提交
464 465 466 467 468 469
访问此属性会返回`tencent``aliyun`分别代表腾讯云和阿里云

## 错误对象@uni-cloud-error

客户端请求云端时(包括请求云函数、云对象、clientDB、云存储等)可能存在抛出错误的场景,此时会抛出uniCloud标准的错误对象(以下记为uniCloudError),uniCloudError包含以下属性

雪洛's avatar
雪洛 已提交
470 471 472 473 474 475
|属性		|类型	|必备	|说明												|
|--			|--		|--		|--													|
|errCode	|string	|是		|错误码												|
|errMsg		|string	|是		|错误信息											|
|requestId	|string	|否		|请求Id,用于排查错误								|
|detail		|object	|否		|仅云对象主动返回错误对应的响应体规范时会有此属性	|
雪洛's avatar
雪洛 已提交
476 477

另外uniCloudError对象上还有code属性和message属性,两者均不推荐使用。