// axios 配置
const request=axios.create({
timeout:5000,
baseUrl:"http://localhost:8081/"
})
我所有请求的路由都有公共前缀,但是我想引入外部网站的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"),
}
})
}
官网:
http://www.axios-js.com/zh-cn/docs/vue-axios.html
cnpm install axios -s
cnpm install --save vue-axios
针对您提出的问题,可以通过修改axios拦截器来去掉路由前缀,具体步骤如下:
import axios from 'axios'
import Vue from 'vue'
Vue.prototype.$axios = axios
axios.interceptors.request.use(config => {
// 判断是否为外部网站url,如果是,则去掉前缀
if (!/^http(s)?:\/\//.test(config.url)) {
config.url = config.baseURL + config.url.replace(/^\//, '')
}
return config
})
this.$axios.get('/example') // 会自动在url前添加路由前缀
this.$axios.get('http://example.com') // 不添加路由前缀
通过以上步骤,即可在使用axios发送网络请求时去掉路由前缀。