taro移动端项目配置api拦截器

taro移动端项目配置api拦截器

前言

个人开源的leno-admin后台管理项目,前端技术栈:reactHooksant-design;后端技术栈:koamysqlredis,整个项目包含web端electron客户端mob移动端template基础模板,能够满足你快速开发一整套后台管理项目;如果你觉得不错,就为作者点个✨star✨吧,你的支持就是对我最大的鼓励;

演示地址

文档地址

源码github地址

事因

最近在闲暇时间之余,便开始着手于开发我自己个人的开源项目leno-admin的移动端,包含移动端h5页面和微信小程序,也遇到了不少taro的坑,在api拦截上,基于原先web端的api拦截修改了下,适应移动端项目;

代码展示

tsx 复制代码
// 首先你需要安装taro-axios;

import axios, { type Method } from "taro-axios";
import useStore from "~/store";
import Taro from "@tarojs/taro";

const instance = axios.create({
  baseURL: process.env.BASE_ENV,
  timeout: 10000,
});

// 请求拦截器
instance.interceptors.request.use(
  (response: any) => {
    const {
      useUserStore: { token },
    } = useStore();

    // token配置请求头
    if (!response.headers?.authorization && token) {
      response.headers.Authorization = `Bearer ${token}`;
    }

    return response;
  },
  (error) => Promise.reject(error)
);

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    httpMessageHandle(response.data);
    return response;
  },
  (error) => {
    const { data } = error.response;
    httpMessageHandle(data, true);
    return Promise.reject(error);
  }
);

const httpMessageHandle = (
  data: { code: any; message: any },
  isError = false
) => {
  // userStore
  const {
    useGlobalStore: { logout, changeLogout },
    useUserStore: { removeLocalToken },
  } = useStore();
  /** 错误集中提示
   * 400 => 表示前端传参可能出现错误
   * 401 => 权限过期
   * 403 => 无访问权限
   * 500 => 服务器拒绝请求
   */
  switch (data && data.code) {
    case 400:
      Taro.showToast({
        title: `${data.message}`,
        icon: "error",
      });
      break;
    case 401:
      if (logout) {
        changeLogout(false);
        Taro.showModal({
          title: "系统提示",
          content: "登录状态已过期,您可以继续留在该页面,或者重新登录",
          cancelText: "取消",
          confirmText: "重新登录",
          success: function (res) {
            if (res.confirm) {
              changeLogout(true);
              removeLocalToken("");
              window.location.hash = "/login";
            } else if (res.cancel) {
              changeLogout(true);
            }
          },
        });
      }
      break;
    case 403:
      Taro.showToast({
        title: `${data.message}`,
        icon: "error",
      });
      break;
    case 500:
      Taro.showToast({
        title: `${data.message}`,
        icon: "error",
      });
      break;

    default:
      isError &&
        Taro.showToast({
          title: "未知错误,请联系管理人员",
          icon: "error",
        });
      break;
  }
};

结语

leno-admin-mobx因为个人原因,零零散散写了有一阵子了,还在开发中,平时生活工作中琐事烦心,导致减少了在leno-admin上投入的时间,接下来,需要全力以赴将leno-admin-mob第一版完成并发布;

相关推荐
罗超驿5 分钟前
15.JavaScript 函数与作用域完全指南:语法、参数、表达式与作用域链实战
开发语言·前端·javascript
.千余7 分钟前
【C++】C++类与对象2:C++构造函数、运算符重载与流输入输出全面解析
c语言·开发语言·前端·c++·经验分享
且听风吟_xincell15 分钟前
用 TypeScript 从零写一个 TCP 聊天室(上)—— 网络编程入门实战
网络·tcp/ip·typescript
星栈1 小时前
Rust 单二进制部署,真没你想的那么“单”
前端·后端
angerdream1 小时前
Android手把手编写儿童手机远程监控App之webrtc聊天数据通道
前端
浩风祭月1 小时前
受够了每次切分支都要重装依赖:一份 Git 工作流优化指南
前端·ai编程
谭光志1 小时前
如何从零开始实现一个 AI Agent CLI
前端·javascript·ai编程
烛衔溟1 小时前
TypeScript 模块与声明文件全解
linux·ubuntu·typescript
半个落月2 小时前
彻底搞懂 JavaScript 变量提升(Hoisting)—— 从现象到底层原理
前端·javascript
零度晚风2 小时前
React 底层原理 & 新特性
前端