vue用fetch发送请求解决跨域问题(CORS)

1.设置代理路径 ,找到config/index.js文件里面的proxyTable

 dev: {
    env: require('./dev.env'),
    port: 8081,
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/api': {//前端路由匹配模式
        target: 'http://localhost:8089',  //后端请求服务域名和端口
        changeOrigin: true,   //设置请求头
        pathRewrite: {
          '^/api': '/api'   //路径重写  前端api 对应 后端/api
        },
      }
    },

2.  第一行,定义代理路径。

let api = '/api';  //定义代理路径!!!
export default async(url = '', data = {}, type = 'GET', method = 'fetch') => {
  type = type.toUpperCase();
  if(!url.startsWith('http')){
    url = api + url;
  }
  let dataStr = ''; //数据拼接字符串
  Object.keys(data).forEach(key => {
    dataStr += key + '=' + data[key] + '&';
  })
  if (type == 'GET') {
    if (dataStr !== '') {
      dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
      //请求里加上随机数,避免数据从缓存里面取
      url = url + '?' + dataStr + '&t=' + Date.now();
    }else{
      url = url + '?t=' + Date.now();
    }
  }

  if (window.fetch && method == 'fetch') {
    let requestConfig = {
      credentials: 'include',
      method: type,
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
      },
      mode: "cors",
      cache: "force-cache"
    }

    if (type == 'POST') {
      //请求里加上随机数,避免数据从缓存里面取
      url = url + '?t=' + Date.now()
      Object.defineProperty(requestConfig, 'body', {
        //value: JSON.stringify(data)
        value: dataStr
      })
    }

    try {
      const response = await fetch(url, requestConfig);
      const responseJson = await response.json();
      return responseJson
    } catch (error) {
      throw new Error(error)
    }
  } else {
    return new Promise((resolve, reject) => {
      let requestObj;
      if (window.XMLHttpRequest) {
        requestObj = new XMLHttpRequest();
      } else {
        requestObj = new ActiveXObject;
      }

      let sendData = '';
      if (type == 'POST') {
        sendData = JSON.stringify(data);
      }

      requestObj.open(type, url, true);
      requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      requestObj.send(sendData);

      requestObj.onreadystatechange = () => {
        if (requestObj.readyState == 4) {
          if (requestObj.status == 200) {
            let obj = requestObj.response
            if (typeof obj !== 'object') {
              obj = JSON.parse(obj);
            }
            resolve(obj)
          } else {
            reject(requestObj)
          }
        }
      }
    })
  }
}

若有错误,多多指正!!!

Vue Admin 框架中使用 CORS 解决跨域问题可以通过以下步骤: 1. 安装 axios:首先,确保你的项目中已经安装了 axios,可以使用以下命令进行安装: ```bash npm install axios --save ``` 2. 创建一个 axios 实例:在你的项目中创建一个独立的 axios 实例,用于发送跨域请求。在这个实例中,你可以设置一些默认的请求头和其他配置。 ```javascript // src/utils/axios.js import axios from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com', // 设置请求的基础URL timeout: 5000, // 设置请求超时时间 withCredentials: true, // 允许携带跨域凭证(例如:cookies) }); export default instance; ``` 3. 在需要发送跨域请求的地方使用 axios 实例:在你的组件或其他地方,使用创建的 axios 实例来发送跨域请求。 ```javascript // src/views/Example.vue <template> <div> <button @click="fetchData">Fetch Data</button> </div> </template> <script> import axios from '@/utils/axios'; export default { methods: { fetchData() { axios.get('/data') .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); }, }, }; </script> ``` 在上述示例中,我们使用了创建的 axios 实例来发送 GET 请求,并访问了`/data`路径。由于我们已经在 axios 实例中设置了基础URL,实际发送请求将是`https://api.example.com/data`。 请注意,在服务器端也需要设置相应的 CORS 头来允许跨域请求。你可以参考前面提到的服务器端设置响应头部分的示例代码来设置服务器端的 CORS 头。 以上是在 Vue Admin 框架中使用 CORS 解决跨域问题的一种方法,你可以根据实际需求和项目结构进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值