axios的介绍及配置多个服务器url

文章目录

1、常用的默认配置的是:baseURL、method、timeout

① baseURL:设置url的基本结构(请求根地址),域名和协议,再结合属性url某个请求路径,axios会自动将baseURL 和 url 进行拼接,从而得出正确的请求路径。

② method:请求方式 get/post

③ timeout:延时时间(超过多少时间就取消请求)【单位是毫秒】

2、axios配置多个服务器url

javascript 复制代码
// 请求时的基础配置VITE_APP_BASE_URL
export const URLMap = {
  base: import.meta.env.MODE === 'development'
  ? import.meta.env.VITE_APP_BASE_URL
  : (window as any).config.VITE_APP_BASE_URL,
  pdf:import.meta.env.MODE === 'development'
  ? import.meta.env.VITE_APP_BASE_URL_PDF
  : (window as any).config.VITE_APP_BASE_URL_PDF,
}
  
const REQUESTS : Record<string, AxiosInstance> = {}

declare module 'axios' {
  interface AxiosResponse<T = any> {
    errorinfo: null
    doc: any
    time: any
    x: any
    y: any
  }
  export function create(config?: AxiosRequestConfig): AxiosInstance
}

Object.keys(URLMap).forEach((item) => {
    const REQUEST: AxiosInstance = axios.create({
    baseURL: URLMap[item],
    headers: {
      'Content-Type': 'application/json;charset=UTF-8',
    },
    timeout: 300000,
    withCredentials: item === 'data',
  })
  REQUESTS[item] = REQUEST
})


// 请求拦截器
Object.keys(REQUESTS).forEach((item) => {
  REQUESTS[item].interceptors.request.use(async (config: AxiosRequestConfig) => {
    const headerToken = await getToken()
    config.headers = config.headers || {}
    if (headerToken)
      config.headers.Authorization = headerToken
  
    if (config.headers.type === 'form') {
      delete config.headers.type
      config.data = qs.stringify(config.data)
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    }
    return config
  })
})


// 响应拦截器
Object.keys(REQUESTS).forEach((item) => {
  REQUESTS[item].interceptors.response.use(
    async (response: AxiosResponse) => {
      const { status, data = {}, statusText } = response
      const errorText = serverCodeMessage[status] || statusText
      const error = ''
      if (status)
        return Promise.resolve(data)
      message.error(error)
      return Promise.reject(error)
    },
    (error) => {
      message.error(String(new Error(error)))
      return Promise.reject(new Error(error))
    },
  )
})

export default REQUESTS

3、配置api文件

javascript 复制代码
import requests from '@/service/index'

export const getAll = (data: paramsInter) => requests.base({
  url: 'xx/xx',
  method: 'POST',
  data,
})
export const get = (data: paramsInter) => requests.pdf({
  url: 'xx/xx',
  method: 'POST',
  data,
})

这样,不同的接口实现从不同的服务器获取资源

4、文件中使用

javascript 复制代码
import { getAll} from '@/service/xx/index'
onMounted(() => {
  getXX()
})

function getXX() {
  getAll(params).then((res) => {
  // xxx
}
相关推荐
木井巳4 小时前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法
qq_543447824 小时前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php
DeviceHub4 小时前
AI服务器电源设计进阶:TLVR电感的应用解析与选型验证指南
运维·服务器·人工智能
Apipi*4 小时前
30天速通Linux 第七章进程间通信
linux·运维·服务器
能源革命4 小时前
Vue 网格拖拽布局组件全景指南:7 大方案深度对比
前端·javascript·vue.js
Crazy________4 小时前
05Linux内存管理核心原理与运维实战
java·开发语言
Nebula_g4 小时前
JavaSE拓展:工具类Executors
java·开发语言·后端·spring·基础·javase
扶风ff4 小时前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
鱼宵4 小时前
Spring AI 可观测与透明化:traceId 串起全链路,思考过程实时直播给用户
java·人工智能·spring·链路追踪·springai
穆梓兰煊4 小时前
AI供应链安全不再只是包安全,还涉及模型与数据
前端·数据库