ts-axios封装

index.ts封装

import axios  from 'axios'
import type { AxiosInstance, AxiosError,InternalAxiosRequestConfig,AxiosResponse,AxiosRequestConfig } from 'axios'
import {ElMessage} from 'element-plus'


const URL:string = ""

enum RequestEnums {
  TIMEOUT = 20000,
  OVERDUE = 600, //登录失败
  FAIL = 999, //请求失败
  SUCCESS = 200, //登录成功的code
}


const instance:AxiosInstance = axios.create({
  baseURL:"/app",
  timeout:500000
})
instance.interceptors.request.use((config:InternalAxiosRequestConfig)=>{
  const token = localStorage.getItem("token")
   if(token){
    config.headers.Authorization = "Bearer " + token
   }
  return config
},(error:AxiosError)=>{
  return Promise.reject(error)
})

instance.interceptors.response.use((
  response:AxiosResponse
)=>{
  console.log(response);
const { status, data, message} = response.data
if(status == 200){
  return data
}else if(status == 1000){
  ElMessage.error("没有登录")
}else{
  ElMessage.error(message)
}
return Promise.reject(new Error(message))
},(error:AxiosError)=>{
  let message = ""
  let Status= error.response?.status
  if(Status){
    switch(Status){
      case 401:
        message = "token过期"
        break
      case 403:
        message = "无权访问"
        break
      case 404:
        message = "请求地址错误"
        break
      case 500:
        message = "服务器出现问题"
        break
      default:
        message = "其他错误"
    }
  }
  ElMessage.error(message)
  return Promise.reject(error)
})

const http = {
  get<T = any>(url:string,config?:AxiosRequestConfig):Promise<T>{
    return instance.get(url,config)
  },

  post<T=any>(url: string, data?: object, config?: AxiosRequestConfig): Promise<T> {
    return instance.post(url, data, config)
  }

 
}
 
 export default http
 

使用

import http from "@/request"
interface Result <T=any>{
  dept_names:number | null,
  message:string,
  timestamp:string,
  roleInfos:T,
  fullname:string | null,
}
 http.get< Result >("/cyber/user/info").then(res =>{
        console.log("res=",res);
        const store = useUserStore()
        let isShiBM = false
        for (let i in res.roleInfos) {
          let role = res.roleInfos[I]
          if (role.code == 'BMRY') { 
              for (let j in role.info_list) {
                  if (role.info_list[j].org_id === 0) {
                      isShiBM = true
                      break
                  }
              }
              break
          }
         }
        store.changeUserInfo(res,res.fullname,res.roleInfos,isShiBM)
        next()
       })

对业务接口的二次封装

WeChatabf46f9cc56d854a51669ade72875f6d.jpg

index.ts文件

// 用户有关的接口
import  http  from '@/request/index';
import type { Result } from "./types"

export function getUserInfo() {
return http.get<Result>("/cyber/user/info");
}

types.ts文件

// 用户有关的类型定义
export interface Result <T=any>{
 dept_names:number | null,
 message:string,
 timestamp:string,
 roleInfos:T,
 fullname:string | null,
}

具体使用

import { getUserInfo } from "@/assets/api/user"
router.beforeEach(async (to,from,next)=>{
  console.log(to.name);
    let token = localStorage.getItem("token")
    if(token){
      //  http.get<Result>("/cyber/user/info").then(res =>{
      //   console.log("res=",res);
      //   const store = useUserStore()
      //   let isShiBM = false
      //   for (let i in res.roleInfos) {
      //     let role = res.roleInfos[i]
      //     if (role.code == 'BMRY') { //部门人员
      //         for (let j in role.info_list) {
      //             if (role.info_list[j].org_id === 0) { //市级部门人员(里面的市教育人的角色)
      //                 isShiBM = true
      //                 break
      //             }
      //         }
      //         break
      //     }
      //    }
      //   store.changeUserInfo(res,res.fullname as string,res.roleInfos,isShiBM)
      //   next()
      //  })
      let res = await getUserInfo()
         console.log("66666=",res);
        const store = useUserStore()
        let isShiBM = false
        for (let i in res.roleInfos) {
          let role = res.roleInfos[i]
          if (role.code == 'BMRY') { //部门人员
              for (let j in role.info_list) {
                  if (role.info_list[j].org_id === 0) { //市级部门人员(里面的市教育人的角色)
                      isShiBM = true
                      break
                  }
              }
              break
          }
         }
        store.changeUserInfo(res,res.fullname as string,res.roleInfos,isShiBM)
        next()
    }
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容