interceptor.md 2.1 KB
Newer Older
Q
qiang 已提交
1 2 3 4 5 6 7
### uni.addInterceptor(STRING, OBJECT)
添加拦截器

**STRING 参数说明**

需要拦截的`api`名称,如:`uni.addInterceptor('request', OBJECT)` ,将拦截 `uni.request()`

雪洛's avatar
雪洛 已提交
8 9 10 11
注意:

- 仅支持异步接口,如:`uni.setStorage(OBJECT)`,暂不支持同步接口如:`uni.setStorageSync(KEY,DATA)`
- uniCloud请求云端接口时(callFunction、uploadFile等)也会使用uni.request发送请求,请确保拦截器内不错误的处理此类请求
DCloud_JSON's avatar
DCloud_JSON 已提交
12

Q
qiang 已提交
13 14
**OBJECT 参数说明**

DCloud_JSON's avatar
DCloud_JSON 已提交
15 16 17 18 19 20
|参数名		|类型		|必填	|默认值	|说明		|平台差异说明	|
|:-			|:-			|:-		|:-		|:-			|:-			|
|invoke		|Function	|否		|		|拦截前触发	|			|
|success	|Function	|否		|		|成功回调拦截	|			|
|fail		|Function	|否		|		|失败回调拦截	|			|
|complete	|Function	|否		|		|完成回调拦截	|			|
Q
qiang 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68


**示例**

```javascript
uni.request({
    url: 'request/login', //仅为示例,并非真实接口地址。
    success: (res) => {
        console.log(res.data);
        // 打印: {code:1,...}
    }
});


uni.addInterceptor('request', {
  invoke(args) {
    // request 触发前拼接 url 
    args.url = 'https://www.example.com/'+args.url
  },
  success(args) {
    // 请求成功后,修改code值为1
    args.data.code = 1
  }, 
  fail(err) {
    console.log('interceptor-fail',err)
  }, 
  complete(res) {
    console.log('interceptor-complete',res)
  }
})

```

### uni.removeInterceptor(STRING)
删除拦截器

**STRING 参数说明**

需要删除拦截器的`api`名称

**示例**

```javascript

uni.removeInterceptor('request')

```

DCloud_JSON's avatar
DCloud_JSON 已提交
69
注意:拦截[uni.switchTab](https://uniapp.dcloud.io/api/router?id=switchtab)本身没有问题。但是在微信小程序端点击`tabbar`的底层逻辑并不是触发`uni.switchTab`。所以误认为拦截无效,此类场景的解决方案是在`tabbar`页面的页面生命周期`onShow`中处理。
DCloud_JSON's avatar
DCloud_JSON 已提交
70

Q
qiang 已提交
71 72
##### 拦截器的适用场景非常多,比如路由拦截,权限引导等。
> 你可以参考插件市场,拦截器应用示例:图片选择api时无权限,引导用户快捷打开系统设置:[https://ext.dcloud.net.cn/plugin?id=5095](https://ext.dcloud.net.cn/plugin?id=5095)