### uni.addInterceptor(STRING, OBJECT) 添加拦截器 **STRING 参数说明** 需要拦截的`api`名称,如:`uni.addInterceptor('request', OBJECT)` ,将拦截 `uni.request()` 注意: - 仅支持异步接口,如:`uni.setStorage(OBJECT)`,暂不支持同步接口如:`uni.setStorageSync(KEY,DATA)` - uniCloud请求云端接口时(callFunction、uploadFile等)也会使用uni.request发送请求,请确保拦截器内不错误的处理此类请求 **OBJECT 参数说明** |参数名 |类型 |必填 |默认值 |说明 |平台差异说明 | |:- |:- |:- |:- |:- |:- | |invoke |Function |否 | |拦截前触发 | | |returnValue |Function |否 | |方法调用后触发,处理返回值 | | |success |Function |否 | |成功回调拦截 | | |fail |Function |否 | |失败回调拦截 | | |complete |Function |否 | |完成回调拦截 | | **示例** ```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.addInterceptor({ returnValue(args) { // 只返回 data 字段 return args.data } }) ``` ### uni.removeInterceptor(STRING) 删除拦截器 **STRING 参数说明** 需要删除拦截器的`api`名称 **示例** ```javascript uni.removeInterceptor('request') ``` 注意:拦截[uni.switchTab](https://uniapp.dcloud.io/api/router?id=switchtab)本身没有问题。但是在微信小程序端点击`tabbar`的底层逻辑并不是触发`uni.switchTab`。所以误认为拦截无效,此类场景的解决方案是在`tabbar`页面的页面生命周期`onShow`中处理。 ##### 拦截器的适用场景非常多,比如路由拦截,权限引导等。 > 你可以参考插件市场,拦截器应用示例:图片选择api时无权限,引导用户快捷打开系统设置:[https://ext.dcloud.net.cn/plugin?id=5095](https://ext.dcloud.net.cn/plugin?id=5095)