前端解决跨域--proxy

一:普通代理

vue 中的 proxy 是利用了 Node 代理

vue.config.js 中配置:

module.exports = {
            devServer: {
              proxy: {
                  '/api': {
                      target: 'http://e.dxy.net',  // 后台接口域名
                      ws: true,        			  //如果要代理 websockets,配置这个参数
                      secure: false,  			  // 如果是https接口,需要配置这个参数
                      changeOrigin: true,  		  //是否跨域
                  }
              }
            }
        }

1;假设你要调取的接口是 http://e.dxy.net/api/test

2:axios.get(’/api/test’)

3:我们一般调接口 axios.get(’/api/test’),这样调是自动请求的当前域名,也就是本地就调用
localhost:8080/api/test

4:配置代理后,会做如下转发:

 localhost:8080/api/test  => http://e.dxy.net/api/test

二:用到pathRewrite的情况

1:当你调接口后端的命名没有统一给接口前加 /api 这类的标识,那么你可以自己加

2:假设你

	有一个的接口是 http://e.dxy.net/test,
    有一个的接口是 http://e.dxy.net/node,
    有一个的接口是 http://e.dxy.net/list

3:如果还是上面的配置,调用axios.get(’/test’),就会出现404的情况,因为代理中配置的是”/api“,不会走代理,此时需要用到 pathRewrite

4:我们将配置改为如下:

devServer: {
  proxy: {
      '/mine': {
          target: 'http://e.dxy.net',  // 后台接口域名
          ws: true,        //如果要代理 websockets,配置这个参数
          secure: false,  // 如果是https接口,需要配置这个参数
          changeOrigin: true,  //是否跨域
          pathRewrite:{
              '^/mine': '/'
          }
      }
  }
}

5:此时调用例子中的接口我们可以手动加类似标识,保持和配置一致:

 	axios.get('/mine/test')
    axios.get('/mine/node')
    axios.get('/mine/list')

6:此时的转发变成:

localhost:8080/mine/test    =>   http://e.dxy.net/mine/test   =>   http://e.dxy.net/test

7:这里pathRewrite配置的意思是将路径中的/mine重写为/

8:这样就能解决跨域啦。

(注:在浏览器调试工具的network中看到的路径还是 localhost:8080/mine/test)

三:全局代理

devServer: {
 proxy: 'http://e.dxy.net'
}

参考资料:https://blog.csdn.net/weixin_43972437/article/details/107291071

你可能感兴趣的:(前端,vue.js,javascript)