vue正式环境如何能配置多个请求的url?
vue项目 打包放到服务器上之后 如何能做到 模块1 请求www.xxx1.com的接口,模块2请求www.xxx2.com的接口.... ..
这种能实现吗?需要怎么配置 动态配置
回答:
想了两个方案,一个是axios创建实例的时候就不同前缀,一个是加入拦截器改写配置。
从长远来说,还是分开比较好。
const axiosInstanceForXXX1 = axios.create({ baseURL: 'http://localhost:8001/api/',
timeout: 5000,
});
const axiosInstanceForXXX2 = axios.create({
baseURL: 'http://localhost:8002/api/',
timeout: 5000,
});
const response = await axiosInstanceForXXX1.get('/path');
const response2 = await axiosInstanceForXXX2.get('/path');
方案2
instance.interceptors.request.use( (config) => {
let { url } = config;
// 如果 URL 以 '/module-a' 开头,则修改 baseURL
if (url && url.startsWith('/module-a')) {
config.baseURL = 'https://module-a-api.example.com/';
}
if (url && url.startsWith('/module-b')) {
config.baseURL = 'https://module-b-api.example.com/';
}
url = url.replace('/module-a/','/')
config.url = url.replace('/module-b/','/')
return config;
},
(error) => {
// 处理请求错误
return Promise.reject(error);
}
);
调用
import api from "./utils/axios.ts";api.get('/module-a/xx')
api.get('/module-b/xx')
ps 注意代码健壮性,我就演示一下思路
回答:
生产环境,大部分都是通过nginx代理的吧
给对应模块的接口,加个/xxx1前缀,在nginx做前缀过滤再指向不同模块就行
回答:
线上发布一般都需要使用nginx反向代理实现不同接口访问不同服务,比如
server { listen 8080;
listen [::]:8080;
server_name localhost;
location /api1 {
proxy_pass http://服务网关1;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
location /api2 {
proxy_pass http://服务网关2;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
回答:
上生产的话一般都是相对路径请求的,你在页面中模块1的接口一般会有/m1/xxx
的标识,模块2的接口也会有/m2/xxx
的标识。
开发环境下,你肯定是通过配置代理的方式/m1
和/m2
开头的API分别代理到不同的服务。同理,在开发环境下,也是如此,不过把vue
代理改成了nginx
回答:
我一般大概是这样做的,可以参考一下,项目中可能会复杂一点
// 是否开发模式const isDev = true
const prefixMap = isDev ? {
'API_01': 'http://192.168.0.199:456',
'API_02': 'http://192.168.0.211:8080',
} : {
'API_01': 'https://www.baidu.com',
'API_02': 'https://www.google.com',
}
export default function request (options) {
return axios({
baseURL: prefixMap[options.baseURL],
url: options.url
})
}
// 使用自己封装的函数
request({
baseURL: 'API_01',
url: '/get/userinfo/'
})
以上是 vue正式环境如何能配置多个请求的url? 的全部内容, 来源链接: utcz.com/p/935150.html