Appearance
qin.addInterceptor(STRING, OBJECT)
添加拦截器
STRING 参数说明
需要拦截的 api 名称,如: qin.addInterceptor('request', OBJECT) ,将拦截 qin.request()
注意:
- 仅支持异步接口,如:
qin.setStorage(OBJECT),暂不支持同步接口如:qin.setStorageSync(KEY,DATA)
OBJECT 参数说明
| 参数名 | 类型 | 必填 | 默认值 | 说明 | 平台差异说明 |
|---|---|---|---|---|---|
| invoke | Function | 否 | 拦截前触发 | ||
| returnValue | Function | 否 | 方法调用后触发,处理返回值 | ||
| success | Function | 否 | 成功回调拦截 | ||
| fail | Function | 否 | 失败回调拦截 | ||
| complete | Function | 否 | 完成回调拦截 |
示例
js
qin.request({
url: 'request/login', //仅为示例,并非真实接口地址。
success: (res) => {
console.log(res.data);
// 打印: {code:1,...}
},
});
qin.addInterceptor('request', {
invoke(theArgs) {
// request 触发前拼接 url
theArgs.url = 'https://www.example.com/' + theArgs.url;
},
success(theArgs) {
// 请求成功后,修改code值为1
theArgs.data.code = 1;
},
fail(theErr) {
console.log('interceptor-fail', theErr);
},
complete(theRes) {
console.log('interceptor-complete', theRes);
},
});
qin.addInterceptor({
returnValue(theArgs) {
// 只返回 data 字段
return theArgs.data;
},
});qin.request({
url: 'request/login', //仅为示例,并非真实接口地址。
success: (res) => {
console.log(res.data);
// 打印: {code:1,...}
},
});
qin.addInterceptor('request', {
invoke(theArgs) {
// request 触发前拼接 url
theArgs.url = 'https://www.example.com/' + theArgs.url;
},
success(theArgs) {
// 请求成功后,修改code值为1
theArgs.data.code = 1;
},
fail(theErr) {
console.log('interceptor-fail', theErr);
},
complete(theRes) {
console.log('interceptor-complete', theRes);
},
});
qin.addInterceptor({
returnValue(theArgs) {
// 只返回 data 字段
return theArgs.data;
},
});qin.removeInterceptor(STRING)
删除拦截器
STRING 参数说明
需要删除拦截器的api名称
示例
js
qin.removeInterceptor('request')qin.removeInterceptor('request')注意:拦截 qin.switchTab 本身没有问题。但是在微信小程序端点击 tabbar 的底层逻辑并不是触发 qin.switchTab 。所以误认为拦截无效,此类场景的解决方案是在 tabbar 页面的页面生命周期 onShow 中处理。
拦截器的适用场景非常多,比如路由拦截,权限引导等。
你可以参考插件市场,拦截器应用示例:图片选择 api 时无权限,引导用户快捷打开系统设置:插件市场 - 拦截器应用示例 — 图片选择