第一种
如果你的前端应用和后端 需要跨域,你需要在开发环境下将 API 请求代理到 API 服务器。可以通过*.config.js 中的 devServer.proxy 选项来配置。
devServer: {
open: false,
host: '0.0.0.0',
port: 8080,
https: false,
disableHostCheck: true,
hot: true,
hotOnly: false,
proxy: {
[process.env.VUE_APP_API]: {
target: process.env.VUE_API_DEV_TARGET,
changeOrigin: true,
pathRewrite: {
[`^${process.env.VUE_APP_API}`]: ''
}
}
}
},
PS:devServer.disableHostCheck 配置项用于配置是否关闭用于 DNS 重绑定的 HTTP 请求的 HOST 检查。 DevServer 默认只接受来自本地的请求,关闭后可以接受来自任何 HOST 的请求。 它通常用于搭配–host 0.0.0.0 使用,因为你想要其它设备访问你本地的服务,但访问时是直接通过 IP 地址访问而不是 HOST 访问,所以需要关闭 HOST 检查。
其中的process.env.Vue_app_API 是开发环境文件.env.development 中的内容
VUE_APP_API = "/api"
VUE_API_DEV_TARGET = "http://192.168.1.114:3000/"
创建axios实例
const service = axios.create({
baseURL: process.env.VUE_APP_API,
withCredentials: true,
timeout: 30000,
headers: {
"Content-Type": "application/json;"
}
});
-
proxy会拦截所有url中可以成功匹配到 ‘/api’ 的请求。(proxy采用正则匹配,一旦url中包含你要的字符串则停止向下匹配,详查proxy匹配规则) -
它会把拦截到的请求中的baseUrl替换为此处的target 如,http://192.168.1.114:3000/banner为请求内容的api, 本地项目为http://192.168.1.114:3001/进行访问,这就需要跨域,经过上述配置后。 使用http://192.168.1.114:3001/api/baner请求时,通过devServer.proxy拦截器把http://192.168.1.114:3001/api进行替换成http://192.168.1.114:3000/后加/banner进行请求
api调用
export function getBrainInfo(params) {
return service.request({
url: '/expert/brain',
method: 'get',
params
})
}
第二种
devServer: {
disableHostCheck: true,
open: true,
host: '192.168.1.114',
port: 3001,
https: true,
proxy: 'http://192.168.1.114:3000',
before: app => {}
},
参考:
https://blog.csdn.net/m0_50015961/article/details/109901080
https://cli.vuejs.org/zh/config/#devserver
|