# uniCloud客户端sdk uniCloud分为客户端和云端两部分,有些接口名称相同,参数也相近,在此列举客户端sdk内可以使用的接口/属性,避免混淆 ## API 客户端API列表 |API |描述 | |-- |-- | |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) | |uniCloud.getCurrentUserInfo() |获取当前用户信息 [详情](#client-getcurrentuserinfo) | |uniCloud.init() |同时使用多个服务空间时初始化额外服务空间 [详情](init.md) | |uniCloud.addInterceptor() |新增拦截器 [详情](#add-interceptor) | |uniCloud.removeInterceptor() |移除拦截器 [详情](#remove-interceptor) | |uniCloud.interceptObject() |拦截云对象请求 [详情](#intercept-object) | |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) | |uniCloud.initSecureNetworkByWeixin() |在微信小程序安全网络请求发送之前与云函数握手 [详情](#init-secure-network-by-weixin) | ### 获取当前用户信息getCurrentUserInfo@client-getcurrentuserinfo > HBuilderX 3.1.0+ 解析客户端token获取用户信息。常用于在前端判断当前登录的用户状态和用户权限,比如根据不同的权限显示隐藏某些按钮。 **注意** - 此接口不会发送网络请求,**此接口仅仅是客户端接口,不校验token的合法性以及是否过期** - 需要搭配uni-id使用并要求客户端必须将token存储在storage内的`uni_id_token`内 - 如需获取role、permission需要将角色权限缓存在token内,此功能自uni-id 3.0.0 或 uni-id-common中默认开启 用法:`uniCloud.getCurrentUserInfo()` 该方法为同步方法。 **响应参数** | 字段 | 类型 | 说明 | | --- | --- | --- | | uid | Number|当前用户uid | | role | Array |用户角色列表。admin用户返回["admin"] | | permission | Array |用户权限列表。注意admin角色此数组为空 | | tokenExpired | Number|token过期时间 | 未能获取用户信息时返回以下结果 ```js { uid: null, role: [], permission: [], tokenExpired: 0 } ``` **示例** ```js console.log(uniCloud.getCurrentUserInfo().role.indexOf('admin')>-1); // 如果是admin用户的话,打印结果为true ``` ### 新增拦截器@add-interceptor > 新增于HBuilderX 3.1.20 接口形式:`uniCloud.addInterceptor(String apiName, Object interceptor)` **平台兼容性** |阿里云 |腾讯云 | |---- |---- | |√ |√ | **入参说明** | 字段 | 类型 | 必填| 说明 | | --- | --- | --- | --- | | apiName | string| 是 | 要拦截的Api名称,可选值:callFunction、database、uploadFile | | interceptor| object| 是 | 要添加的拦截器 | **interceptor参数说明** |参数名 |类型 |必填 |默认值 |说明 |平台差异说明 | |--- |--- |--- |--- |--- |--- | |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 接口形式:`uniCloud.removeInterceptor(String apiName, Object interceptor)` **入参说明** | 字段 | 类型 | 必填| 说明 | | --- | --- | --- | --- | | apiName | string| 是 | 要拦截的Api名称,可选值:callFunction、database、uploadFile | | interceptor| object| 是 | 要移除的拦截器,选填,不传递此参数时移除此Api所有拦截器 | **interceptor参数说明** |参数名 |类型 |必填 |默认值 |说明 |平台差异说明 | |--- |--- |--- |--- |--- |--- | |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 }) ``` ### 拦截云对象请求@intercept-object > 新增于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拦截器相同的参数,具体以云函数是否执行成功为准 ### 监听云端响应@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) ``` ### 监听需要登录事件@on-need-login > 新增于HBuilderX 3.5.0 用于监听客户端需要登录事件,此接口需要搭配uniIdRouter使用,参考:[uniIdRouter](uni-id-summary.md#uni-id-router) 代码示例: ```js uniCloud.onNeedLogin(function(event) { // event格式见下方说明 }) ``` **响应格式** ```js interface OnNeedLoginEvent { errCode: number | string, errMsg: string, uniIdRedirectUrl: string // 触发onNeedLogin页面前的页面地址(包含路径和参数的完整页面地址) } ``` **注意** - 开发者自定监听onNeedLogin事件后,uniIdRouter的自动跳转登录页面功能会禁用,由开发者在`onNeedLogin`内自行处理跳转 ### 移除需要登录事件的监听@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 } ``` **注意** - 开发者自定监听onNeedLogin事件后,uniIdRouter的自动跳转登录页面功能会禁用,由开发者在`onNeedLogin`内自行处理跳转 ### 移除需要登录事件的监听@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) ``` ### 微信小程序安全网络初始化@init-secure-network-by-weixin > 新增于 3.6.8 安全网络相关文档请参考:[安全网络](secure-network.md) **参数** |参数 |类型 |必填 |默认值 |说明 | |--- |--- |--- |--- |--- | |callLoginByWeixin|boolean|否 |false |是否在安全网络初始化同时执行一次uni-id-co的微信登录| **示例** ```js // App.vue ``` **注意** - 发送安全网络请求前uniCloud客户端sdk会判断是否完成初始化,如未完成会等待完成后再发送安全网络请求。 - 需要确保安全网络请求在此方法调用后执行 ## 属性 ### 获取当前uniCloud实例的服务商 用法:`uniCloud.config.provider` 访问此属性会返回`tencent`、`aliyun`分别代表腾讯云和阿里云 ## 错误对象@uni-cloud-error 客户端请求云端时(包括请求云函数、云对象、clientDB、云存储等)可能存在抛出错误的场景,此时会抛出uniCloud标准的错误对象(以下记为uniCloudError),uniCloudError包含以下属性 |属性 |类型 |必备 |说明 | |-- |-- |-- |-- | |errCode |string |是 |错误码 | |errMsg |string |是 |错误信息 | |requestId |string |否 |请求Id,用于排查错误 | |detail |object |否 |仅云对象主动返回错误对应的响应体规范时会有此属性 | 另外uniCloudError对象上还有code属性和message属性,两者均不推荐使用。