前后端分离项目跨域问题解决

前后端分离项目跨域问题解决

开发环境生产环境
后台主导CORSCORS
前端主导proxy代理nginx代理

vue.config.js

module.exports = {
  devServer: {
    proxy: "后台接口地址"
  }
}

配置完proxy之后,我们请求接口的地址需要是当前前端服务的地址

http://localhost:3000 -> http://localhost:8080

既然要请求自己的地址,那么就没有必要写localhost:8080 直接写/即可

http://localhost:8080/api/banners -> /api/banners

如果使用代理,那么就没有必要使用.env中去进行我们对应的接口地址的配置。因为不管在什么环境下,都是请求当前前端服务器地址

如果使用CORS 则需要在build时根据.env去请求不同环境的服务器地址, 如果使用代理,则不需要配置不同地址,全部都使用/api/xxx的形式

后台配置CORS

前端需要在axios的配置中配置baseURL。前提需要先配置好.env环境变量文件

.env.development

新建开发环境的env文件

VUE_APP_BASEURL=http://开发环境接口地址

.env.production

新建生产环境的env文件

VUE_APP_BASEURL=http://生产环境接口地址

配置axios

const _axios = axios.create({
  baseURL: process.env.VUE_APP_BASEURL
})

服务器代理

如果使用代理,则前端不需要再配置BASEURL,因为请求全部走的前端服务(代理)

接口地址直接写 “/xxx” 相关的内容即可

开发环境配置

vue.config.js

如果只有一个后台
module.exports = {
  devServer: {
    
    proxy: "http://开发环境后台地址",
  }
}
如果有多个后台接口
module.exports = {
  devServer: {
    proxy: {
      "/自定义前端请求时前缀": {
        target: "http://开发环境后台地址",
        pathRewrite: {
          "^/自定义前端请求时前缀": "/后台真实前缀"
        }
      },

      "/自定义前端请求时前缀": {
        target: "http://开发环境后台地址",
        pathRewrite: {
          "^/自定义前端请求时前缀": "/后台真实前缀"
        }
      }
    }
  }
}

注意,在请求时,不需要配置axios的baseURL,也不需要添加任何的域名

生产环境中

build之后,我们不再有nodejs服务器,只是静态页面(proxy设置只能针对开发环境)

生产环境需要配置nginx

server {
  listen       80;
  server_name  localhost;

  #charset koi8-r;

  #access_log  logs/host.access.log  main;

  location / {
    root   html;
    # 只能有一个
    # 没有使用history 
    index  index.html index.htm;
    # 使用了history
    try_files $uri $uri/ /index.html;

  }

  # 配置代理
  location /服务器前缀 {
    proxy_pass http://要代理的服务器地址(生产服务器地址);
  }

  # 配置代理 需要进行rewrite
  location /前端请求的前缀 {
    rewrite  ^/前端请求前缀/(.*)$ /后台接口真实前缀/$1 break;
    proxy_pass http://要代理的服务器地址(生产服务器地址);
  }
  

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   html;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值