vue axios 路由前缀问题

// axios 配置
const request=axios.create({
  timeout:5000,
  baseUrl:"http://localhost:8081/"
})

img

我所有请求的路由都有公共前缀,但是我想引入外部网站的json时,外部网站的前缀也添加了这个路由前缀,请问有什么办法可以就这个请求外部网址的请求去掉公共前缀吗?

回答:是可以的,且比较简单,思路如下:
手动的拼接,虽然比较笨,但还是不错的方法,第二种就是在vue.config.js里面配置代理,这个其实感觉不是很好用

import axios from "axios";
import { ElMessage } from 'element-plus';
import md5 from "js-md5";

const baseUrl = "http://127.0.0.1:10004"
const basePayUrl = "http://127.0.0.1:10010"

export function message(msg, type) {
    ElMessage({
        message: msg,
        type: type,
        center: true,
        showClose: true,
    })
}

export const getRequest = (url, params) => {
    return axios({
        method: 'get',
        url: baseUrl + url,
        params: params,
        headers: {
            token: localStorage.getItem("token"),
            username: localStorage.getItem("username"),
            password: localStorage.getItem("password"),
        }
    })
}

export const postRequest = (url, data) => {
    return axios({
        method: 'post',
        url: baseUrl + url,
        data: data,
        headers: {
            token: localStorage.getItem("token"),
            username: localStorage.getItem("username"),
            password: localStorage.getItem("password"),
        }
    })
}

export const postFileRequest = (url, data, onUploadProgress) => {
    return axios({
        method: 'post',
        url: baseUrl + url,
        data: data,
        onUploadProgress: onUploadProgress,
        headers: {
            token: localStorage.getItem("token"),
            username: localStorage.getItem("username"),
            password: localStorage.getItem("password"),
        }
    })
}

export const putRequest = (url, data) => {
    return axios({
        method: 'put',
        url: baseUrl + url,
        data: data,
        headers: {
            token: localStorage.getItem("token"),
            username: localStorage.getItem("username"),
            password: localStorage.getItem("password"),
        }
    })
}

export const deleteRequest = (url, data) => {
    return axios({
        method: 'delete',
        url: baseUrl + url,
        data: data,
        headers: {
            token: localStorage.getItem("token"),
            username: localStorage.getItem("username"),
            password: localStorage.getItem("password"),
        }
    })
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7691080
  • 这篇博客你也可以参考下:vue之axios请求本地json数据
  • 除此之外, 这篇博客: vue--通过路由钩子在页面跳转时获取json数据中的 异步调用获取网络请求需要安装axios: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 官网:
    http://www.axios-js.com/zh-cn/docs/vue-axios.html

    cnpm install axios -s
    cnpm install --save vue-axios
    
  • 您还可以看一下 jason老师的vue通用后台管理课程中的 axios的基本使用小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对您提出的问题,可以通过修改axios拦截器来去掉路由前缀,具体步骤如下:

    1. 在main.js文件中导入axios和Vue,并将axios挂载到Vue原型上
    import axios from 'axios'
    import Vue from 'vue'
    
    Vue.prototype.$axios = axios
    
    1. 在axios实例中添加一个请求拦截器,使用正则表达式去掉路由前缀
    axios.interceptors.request.use(config => {
      // 判断是否为外部网站url,如果是,则去掉前缀
      if (!/^http(s)?:\/\//.test(config.url)) {
        config.url = config.baseURL + config.url.replace(/^\//, '')
      }
      return config
    })
    
    1. 在需要发送网络请求的地方使用axios发送请求即可
    this.$axios.get('/example') // 会自动在url前添加路由前缀
    this.$axios.get('http://example.com') // 不添加路由前缀
    

    通过以上步骤,即可在使用axios发送网络请求时去掉路由前缀。