vue打包上线的代理问题

在将若依管理系统Vue项目打包上线时遇到了代理问题。本地开发时,通过proxy设置的dev-api在生产环境中无效,导致接口请求失败。解决办法是在axios中直接配置baseURL,但这样失去了本地开发时的代理优势。寻求使用Vue代理服务同时解决上线问题的大佬指导。

若依管理系统vue proxy代理导致打包上线出现问题:

最近在使用若依管理系统中出现了代理服务导致的问题,代码如下:

vue.config.js文件配置

devServer: {
    host: '0.0.0.0',
    port: port,
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://192.168.1.120:8002/`,
        // target: `http://192.168.1.21:8002/`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      }
    },
    disableHostCheck: true
  },

vue的开发环境文件.env.development

# 开发环境配置
ENV = 'development'

# 若依管理系统/开发环境
VUE_APP_BASE_API = '/dev-api'

# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

vue的生产环境文件.env.production

# 生产环境配置
ENV = 'production'

# 若依管理系统/生产环境
VUE_APP_BASE_API = '/pro-api'

axios代码

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时
  timeout: 10000
})

问题描述:

在本地开发时,请求后端接口。
后端的登录接口:

api/user/login?account=admin&password=12345678

请求时控制台显示:

http://localhost/dev-api/api/user/login?account=admin&password=12345678

成功。

但是,打包给后端测试,后端显示的请求是这样

http://localhost:8002/pro-api/api/user/login?account=admin&password=12345678

走不通,后来分析是这样。在前端本地开发时,node已经把接口头部给代理好了,这个dev-api会被编译忽略,直接找寻后面的接口api/user/login?account=admin&password=12345678。而到了生产环境时,没有node代理服务,因此访问的接口就是如图所示的整个字符串,pro-api就成了无意义字符串,因此接口也就错了。当时想过把VUE_APP_BASE_API 赋值为空或者/,然而这样在生产环境下会导致页面刷新之后,URL路由被当成接口进行访问,接着页面跳转显示:
在这里插入图片描述

,原因不明。
如果VUE_APP_BASE_API赋值为api,后面的接口去除api,生产环境下是可行了。但是开发环境下api被node忽略导致接口错误。


解决方案:

最后,解决方案。不使用vue的代理服务了,直接在axios下配置baseURL:

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: 'http://192.168.1.120:8002/api',
  // 超时
  timeout: 10000
})

这样,请求的接口就是显示什么,请求的就是什么了。接着后端开启一下跨域就OK了。

现在,在研究如果就是需要vue的代理服务来请求接口,请问大佬们,有什么解决方案吗?!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值