Vue3.0中使用Proxy解决Axios请求跨域的问题

使用Axios进行数据请求的时候可能会遇到跨域问题,如下。
在这里插入图片描述
我们可以通过Vue的proxy来解决跨域的问题。

Vue2.x中在根目录下的config文件夹中index.js文件中dev对象里proxyTable属性进行相应设置即可解决跨域问题,这里不做详细介绍。

Vue3.0中已经没有config文件夹了,所以需要在根目录新建vue.config.js文件

man.js Vue中挂载一下axios

import { createApp } from 'vue'
import axios from 'axios';
import App from './App.vue'
const app = createApp(App)
app.config.globalProperties.$http = axios;
//Vue3.0中不支持Vue.prototype的方式来挂载axios了,改用上面的方法挂载
app.mount('#app')

在新建的vue.config.js文件中写入如下代码

module.exports = {
    publicPath:'./',//静态资源包打包为相对路径
    outputDir:'dist',//输出文件
    devServer:{
        open:false,
        host:'0.0.0.0',
        port:9090,
        hot:true,
        proxy: {
            '/api': {
              target:'http://api.wpbom.com', // 你请求的第三方接口
              changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
              pathRewrite:{  // 路径重写,
                '^/Api': ''  // 替换target中的请求地址,也就是说以后你在请求http://api.wpbom.com这个地址的时候直接写成/Api即可。
              }
            }
        },  
    }
}

假如请求的接口地址为 http://api.wpbom.com/api/neran.php ,在调用接口的地方写入如下代码

//----------指定了pathRewrite时------------------//
export default {
  name: 'HelloWorld',
  props: {},
  mounted(){
    this.$http({
      method:'get',
      url:'Api/api/neran.php',//Api就是proxy中的target地址
      data:{}
    }).then(res=>{
      console.log(res)
    }).catch(err=>{
      console.log(err)
    })
  }
}
//-----------未指定PathRewrte时------------------//
export default {
  name: 'HelloWorld',
  props: {},
  mounted(){
    this.$http({
      method:'get',
      url:'/api/neran.php',//没指定BaseUrl路径重写就不需要写了,直接写接口地址就行了。
      data:{}
    }).then(res=>{
      console.log(res)
    }).catch(err=>{
      console.log(err)
    })
  }
}

vue.config.js 文件中proxy对象中的pathRewrite属性可写可不写,区别就是在接口调用时要写上重写路径和不需要写上重写路径。
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用axios解决跨域问题可以通过以下几种方式: 1. 代理请求:在`vue.config.js`文件配置代理来解决跨域问题。示例如下: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://api.example.com', // 你要请求的后端接口地址 changeOrigin: true, pathRewrite: { '^/api': '' // 如果接口有/api前缀,可以将其去除 } } } } } ``` 然后在你的Vue组件使用axios发送请求,将请求地址的前缀改为`/api`即可,示例如下: ```javascript axios.get('/api/users') .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); ``` 2. JSONP:如果后端接口支持JSONP,可以使用axios-jsonp插件来发送JSONP请求。安装axios-jsonp插件: ```bash npm install axios-jsonp ``` 然后在你的Vue组件使用axios-jsonp发送请求,示例如下: ```javascript import axiosJsonp from 'axios-jsonp'; axios({ url: 'http://api.example.com/users', adapter: axiosJsonp }) .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); ``` 3. CORS设置:如果你有权限修改后端接口的响应头,可以在后端接口设置CORS,允许指定的域名访问接口。示例如下: ```javascript app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', 'http://localhost:8080'); // 允许指定的域名访问接口 res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); // 允许的请求方法 res.header('Access-Control-Allow-Headers', 'Content-Type'); // 允许的请求头 next(); }); ``` 请根据你的具体情况选择适合的解决方案来解决Vue跨域问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值