vue项目中常见的跨域问题解决

问题1:开发过程中vue项目实现跨域访问的方式

解决方案:

  1. 在项目根目录下新建vue.config.js文件,添加如下配置:
module.exports = {
    devServer: {
        disableHostCheck: true,
        //解决跨域问题
        proxy: {
            "/api": {
                target: "http://localhost:8088/server",
                changeOrigin: true,
                pathRewrite: {
                    "^/api": ""
                }
            }
        }
    },
}
  1. 配置axios的baseUrl参数
Vue.prototype.axios.defaults.baseURL = "/api";

这样所有的跨域请求,如:http://localhost:8088/server/XXX都通过代理的方式转换为:http://localhost:8080/api/XXX,实际上是把跨域转换为不跨域。

但是这种方案只适用于开发过程中,项目打包部署后,项目中配置的代理将失效。需要使用nginx反向代理将所有的/api请求映射到http://localhost:8088/server上实现

问题2:vue项目打包部署后的跨域访问问题

解决方案:通过配置nginx代理解决,nginx主要配置如下:

server {
    	   #监听80端口
        listen 80;
        #服务名称
        server_name localhost;
        #反向代理,location越靠前优先级越高,所以此项配置必须放在location /之前,否则会失效
        location /api {
        	  #被代理路径,只能是域名或ip:port形式,以/结尾表示用/替换掉/api
            proxy_pass	http://127.0.0.1:8088;
            #重写url路径,把/api修改为/dlcsh/server/,其他不变$1表示前边()中的分组
            rewrite		^/api/(.*)$ /server/$1 break;
        }
        location / {
            #vue项目路径
            root   /app/web/dist;
            index  index.php index.html index.htm;
        }
}

重启nginx服务后可通过网络访问。后端项目部署在:127.0.0.1:8088上。另附nginx主要命令

#重新加载特定的nginx配置文件
./nginx -s reload -c /app/nginx/nginx.conf
#关闭nginx服务
./nginx -s stop
#重启nginx服务
./nginx -s reopen
#处理完所有请求后关闭nginx服务
./nginx -s quit 

问题3:通过electron-builder打包后跨域访问失效问题的解决

对基于electron-builder插件创建的桌面应用,所有的页面访问都被影射到了文件上,所以配置中的/api访问都会映射到文件上,对vue的网络代理将失效。解决这一问题可以使用electron的方式实现跨域请求,解决方案如下:

  1. 修改axios模块的baseUrl属性为真实的url地址
Vue.prototype.axios.defaults.baseURL = "http://localhost:8088/server";
  1. electron主启动类(我的是background.js文件)中关闭web权限检查
async function createWindow() {
  const win = new BrowserWindow({
    ...
    webPreferences: {
      ...
      //关闭web权限检查,允许跨域
      webSecurity: false
    }
  })
  //打包后开启控制台
  //win.webContents.openDevTools();
  ... 
}

重新打包项目后即可正常访问。

原创文章,欢迎👍,转载请联系作者,并注明出处,谢谢🙏

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李奇技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值