vue 解决跨域问题(开发环境)[通俗易懂]

vue 解决跨域问题(开发环境)[通俗易懂]一、什么是跨域问题同源:域名,协议,端口均相同不同源就是跨域,比如你的前端为localhost:9528,后端为localhost:8080,此时前端去访问后端接口就会产生跨域问题,因为端口不同。这里不详细讲,可参考百度百科-同源策略。二、如何解决跨域问题前后端都可以解决,这里仅提供vue的前端跨域解决方案:前端vue.config.js配置如下,然后保证在你访问后端接口时加个前缀/api。devServer:{port:port,open:false,ov

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、什么是跨域问题

同源:域名,协议,端口均相同

不同源就是跨域,比如你的前端为localhost:9528,后端为localhost:8080,此时前端去访问后端接口就会产生跨域问题,因为端口不同。

这里不详细讲,可参考百度百科-同源策略

二、如何解决

跨域问题前后端都可以解决,这里仅提供vue的前端跨域解决方案:

前端vue.config.js配置如下,然后保证在你访问后端接口时加个前缀/api

devServer: { 
   
    port: port,
    open: false,
    overlay: { 
   
      warnings: false,
      errors: true
    },
    proxy: { 
    // vue2.x版本为 proxyTable,vue3.x为proxy。
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      '^/api': { 
   
        target: 'http://localhost:9999', // 这里的端口是后端端口
        changeOrigin: true,
        secure: false,  // 如果是https接口,需要配置这个参数为true
        pathRewrite: { 
     // 路径重写
          '^/api':''
        }
      }
    }
  }

三、例子

以下例子访问接口的时候都会保证访问的路径为:/api/about/first,包含前缀/api

例1 以axios为例

axios.get('/api/about/first', function (res) { 
    
   console.log(res) 
})

例2 以 vue-element-admin为例

request.js:baseURL这里不写 baseURL

const service = axios.create({ 
   
  // baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 10000 // request timeout
})

api/xxx.js: 在接口这里加前缀

import request from '@/utils/request.js'

export default { 
   
  getFirst() { 
   
    return request({ 
   
      url: '/api/about/first',
      method: 'get'
    })
  }
  }

vue.config.js:

devServer: { 
   
    port: port,
    open: false,
    overlay: { 
   
      warnings: false,
      errors: true
    },
    proxy: { 
   
      // change xxx-api/login => mock/login
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      '^/api': { 
   
        target: 'http://localhost:9999', // 这里的端口是后端端口
        changeOrigin: true,
        secure: false,  // 如果是https接口,需要配置这个参数为true
        pathRewrite: { 
   
          '^/api':''
        }
      }
    }
  }

例3 仍以 vue-element-admin为例

request.js:baseURL这里加前缀

const service = axios.create({ 
   
  baseURL: '/api', // url = base url + request url process.env.VUE_APP_BASE_API+'api'
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

api/xxx.js:这里不加前缀

import request from '@/utils/request.js'

export default { 
   
  getFirst() { 
   
    return request({ 
   
      url: '/about/first',
      method: 'get'
    })
  }
  }

vue.config.js:

devServer: { 
   
    port: port,
    open: false,
    overlay: { 
   
      warnings: false,
      errors: true
    },
    proxy: { 
   
      // change xxx-api/login => mock/login
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      '^/api': { 
   
        target: 'http://localhost:9999', // 这里的端口是后端端口
        changeOrigin: true,
        secure: false,  // 如果是https接口,需要配置这个参数为true
        pathRewrite: { 
   
          '^/api':''
        }
      }
    }
  }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192600.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号