vue cli+axios 代理跨域proxy

本文介绍如何在Vue CLI项目中解决本地开发环境下的跨域问题,并提供了通过配置proxyTable实现跨域的方法。同时,文章还讲解了如何根据不同环境配置API_HOST以及后端服务器的CORS设置。

vue cli脚手架前端调后端数据接口时候的本地代理跨域问题:

如在本地localhost访问接口http://182.131.18.102:8602/是要跨域的,会报错XMLHTTPRequest can not load http://182.131.18.102:8602/. Response to preflight request doesn’t pass access control…. 

解决方案:

在webpack配置一下proxyTable,config/index.js代码如下:

dev: {

    //加入代码

    proxyTable: {

      //处理跨域
      '/api': {
        target: 'http://182.131.18.102:8602/',//设置调用的接口域名和端口号
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们调接口时直接用api代替 比如我要调用'http://182.131.18.102:8602/login/login',直接写'/api/login/login'即可
        }
      }

    },

跨域成功了,但是注意了,这只是开发环境(dev)中解决了跨域问题,生产环境中真正部署到服务器上如果还是存在跨域问题,需要前后端联调:

第一步:前端部分可以分生产production和开发development两种环境分别测试,在config/dev.env.js(开发环境)和prod.env.js(生产环境)分别配置一下请求的地址API_HOST,开发环境中我们用上面配置的代理地址api,生产环境下用正常的接口地址,如下配置

config/dev.env.js配置如下

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',//开发环境
  API_HOST:"/api/"

})

prod.env.js配置如下

module.exports = {
  NODE_ENV: '"production"',//生产环境
  API_HOST:'"http://182.131.18.102:8602/"'
}

当然不管是开发还是生产环境都可以直接请求http://182.131.18.102:8602/。配置好之后测试时程序会自动判断当前是开发还是生产环境,然后自动匹配API_HOST,我们在任何组件里都能用process.env.API_HOST来使用地址如
axios.post(process.env.API_HOST+'user/login', .then(res => {
    console.log(res.data)
  }).catch(err =>{
  console.log(err);
  }))
第二步:后端服务器配置一下cros跨域即可,就是access-control-allow-origin:*允许所有访问的意思。

综上:开发的环境下我们前端可以自己配置个proxy代理就能跨域了,真正的生产环境下还需要后端的配合的。此方法ie9及以下不好使,如果需要兼容,最好的办法是后端在服务器端口加个代理,效果类似开发时webpack的代理。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值