Vue项目跨域的解决办法

 

                                            Vue项目中的跨域问题

 

一般我们的前端Vue项目中都会涉及到跨域的问题,在项目中访问web域名获取数据时无法正常获取,浏览器控制台会类似出现

跨域一般分两种情形:

 

  • 开发环境跨域

项目使用的是axios请求网络,将baseUrl修改为/api (这里是使用webpack提供的代理功能将/api代理成目标接口host)

axios.defaults.baseURL = '/api';

进入config/index.js里,在dev下增加proxyTable配置,可以匹配到/api,将其代理成目标接口host

dev: {
 
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/api': {
        target: 'xxxxxxxxxxxxx',//目标接口域名
        changeOrigin: true,//是否跨域
        pathRewrite: {
          '^/api': ''//重写接口,后面可以使用重写的新路径,一般不做更改
        }
      }
    }
}

此时已经解决了dev下的跨域问题。

进入package.json,在dev字段下增加 " --host 0.0.0.0 ",这样可以真机通过ip地址访问项目,进行调试

"scripts": {
    "dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config                                                 build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js"
  }

 


  • 生产环境跨域

同样将axios的baseURL修改为 /api, (生产环境下是使用nginx反向代理,将/api 代理成目标接口host).

axios.defaults.baseURL = '/api';

进入config/index.js里,在build下修改项目路径,将assetsPublicPath字段的 '/' 修改为 '/your_project_name' (名称和项目名称目录一致)

build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),
 
    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/your_project_name',
    ...
}

build项目,将生成的dist文件夹里的文件,复制到tomcat服务器的webapps的项目目录下,我们这里结合nginx使用反向代理来解决。进入nginx/conf目录,新建文件夹your_project_name,以及our_project_name.conf文件

 

编辑your_project_name.conf配置文件,配置反向代理.

server {
        listen       83; #监听83端口,可以改成其他端口
        server_name  localhost; # 当前服务的域名(nginx所在服务器域名)
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            proxy_pass http://localhost:8080;#代理项目部署的地址(这里项目部署在了当前服务器tomcat上,端口8080)
            proxy_redirect default;
        }
 
		location /api { #添加访问目录为/api的代理配置,使以“/api”开头的地址都转到“http://192.168.1.111:8080”上
			rewrite  ^/api/(.*)$ /$1 break;
			proxy_pass   http://192.168.1.111:8080;
        }
}

接着进入nginx/conf/nginx.conf配置文件,导入上面的your_project_name.conf配置.

http {
    ...
 
    include myconfig/*.conf;
    ...
}

此时已可以通过nginx代理访问tomcat下的项目,并且解决了跨域问题.

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值