Skip to content

qin.addInterceptor(STRING, OBJECT) ​

添加拦截器

STRING 参数说明

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

注意:

  • 仅支持异步接口,如: qin.setStorage(OBJECT) ,暂不支持同步接口如: qin.setStorageSync(KEY,DATA)

OBJECT 参数说明

参数名类型必填默认值说明平台差异说明
invokeFunction否拦截前触发
returnValueFunction否方法调用后触发,处理返回值
successFunction否成功回调拦截
failFunction否失败回调拦截
completeFunction否完成回调拦截

示例

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 时无权限,引导用户快捷打开系统设置:插件市场 - 拦截器应用示例 — 图片选择