解决跨域问题

产生跨域

前后端分离时,前端和后端API服务器可能不在同一台主机上,就存在跨域问题,浏览器限制了跨域访问。  同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域 


 静态代理 在vue.config.js的devServer中配置

 // 配置proxy
    proxy: {
      // 开发环境代理配置
      '/dev-api': {
        // 目标服务器地址,代理访问 http://localhost:8001
        target: 'http://localhost:7777',
        changeOrigin: true, // 开启代理服务器,
        pathRewrite: {
          ['^/dev-api']: ''
        }
      }
    }

动态代理,根据不同的环境配置, 

 1.根目录创建开发环境 .env.development 

#只有以 VUE_APP_开头的变量会被webpack 静态嵌入到项目中进行使用
#process.env.VUE_APP_XXX  来获取


#目标服务接口地址,这个地址是按照自己的环境来的,添加或者更改配置后,需要重新启动服务
VUE_APP_SERVICE_URL='http://localhost:7777'

#开发基础路径
VUE_APP_BASE_API='/dev-api'

 2.根目录创建生产环境 .env.production

#生产基础路径
VUE_APP_BASE_API='/pro-api'

3.axios中封装baseURL   utils/request.js

const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000 //请求超时,5000毫秒
});

4.vue.config.js中配置

 proxy: {
      // 开发环境代理配置
      // '/dev-api':
      [process.env.VUE_APP_BASE_API]: {
        // 目标服务器地址,代理访问 http://localhost:8001
        target: process.env.VUE_APP_SERVICE_URL,
        changeOrigin: true, // 开启代理服务器,
        pathRewrite: {
          // ['^/dev-api']: ''
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      }
    }

Vue3项目中,要通过POST方法与帆软报表系统进行数据传输,并解决问题,可以按照以下步骤操作: 1. **配置axios或fetch请求**: - 如果你在项目中使用了`axios`库,可以在创建axios实例时设置`proxyTable`属性来处理。例如,在`main.js`中: ```javascript import axios from 'axios'; const instance = axios.create({ baseURL: process.env.BASE_API, withCredentials: true, // 如果需要发送cookie headers: { 'Content-Type': 'application/json', // 根据实际需求设置 }, proxy: { // 允许 '/report/*': { target: 'http://your-fanyun-report-api.com', changeOrigin: true, pathRewrite: { '^/report': '', // 将请求路径替换为实际API路径 }, }, }, }); ``` - 或者使用浏览器的`fetch` API,你需要在服务器端设置响应头允许,如Node.js的Express应用: ```javascript app.use((req, res, next) => { if (req.method === 'OPTIONS') { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.status(204).end(); } else { next(); } }); ``` 2. **在组件内部发起请求**: 使用配置好的axios或fetch实例发起POST请求: ```javascript async sendData() { try { let response = await axios.post('/report/data', yourData); console.log(response.data); } catch (error) { console.error(error); } } ``` 3. **帆软报表嵌入**: - 获取报表的HTML代码通常有专门的API提供,你可以从帆软报表系统的后台获取报表ID,然后拼接URL(假设是`http://fanyun-report.com/getReport?reportId=your-report-id`)。 - 将这个HTML片段插入到 Vue 页面中的某个容器元素中: ```html <div v-html="reportHtml"></div> ``` - 然后在Vue组件中动态绑定这个值: ```javascript data() { return { reportHtml: '', }; }, mounted() { this.getReport(); }, methods: { getReport() { axios.get('/report/get', { params: { reportId: 'your-report-id', }, }) .then(response => { this.reportHtml = response.data; }) .catch(error => { console.error(error); }); }, }, ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值