vue项目代理服务器

188 阅读2分钟

场景:

项目开发的时候,后端给我一个接口地址,我需要从这个地址获取数据,如果后端做了跨域设置,我就能正常拿到数 据,如果后端没有处理,客户端向服务端发送请求时就会出现跨域(cors)

为什么会出现跨域的问题?

  • 跨域:是浏览器产生的同源策略产生的跨域,服务器之间不存在跨域问题

  • 同源策略:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都会触发浏览器同源策略。

  • 在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。

  • 跨域问题是针对JS和ajax的。而axios是通过Promise实现对ajax技术的一种封装,也同样存在跨域问题。

解决思路

基于前面的知识和场景,我在项目里使用了反向代理这种解决方案

  • 在vue项目中开启一个代理服务器

  • 代理服务器 向 数据服务器(目标服务器) 发起请求

  • 代理服务器 和 前端项目同源,也就没有跨域问题

image.png

代码展示 --- vue项目

1、在config文件中修改index.js


// 这里展示了两个代理地址
module.exports = {
  dev: {
    proxyTable: {
       // 这里的 uas 表示如果我们的请求地址以 /uas 开头的时候,就出触发代理机制
      '/uas': {//http
        target: "http://124.70.216.106:10000", //需要代理的地址,就是后端服务器地址
        changeOrigin: true,//是否跨域,需要设置此值为 true 才可以让本地服务代理我们发出请求
        pathRewrite: {
          '^/uas': '/uas'
        }
      },
      '/api': {//https
        target: 'https://172.16.4.238:14022',
        secure:false,//在代理https时,关键在设置这个值为false,不需要安全证书
        changeOrigin: true,
        pathRewrite: {
           '^/api': '/api'
        }
     },
   }
 }

2、在config文件中修改dev.env.js

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',//这里需要使用双个引号
  API_HOST:'/api/' //开发环境中加上这段关键,不然出错
})

3、在config文件中修改prod.env.js

module.exports = {
  NODE_ENV: '"production"',//这里需要使用双个引号
  API_HOST: 'http://172.16.4.238:14022'//生产环境中加上这段关键,不然出错
}

4、在你请求的端口之前加上

 this.$axios({
     url: '/api/captch/sent?phone' //这里需要在你请求的端口之前加上/api/.
     method: 'POST',
 }) 

总结: 这4步一步也不能少,谨记