详解vue-cli项目中的proxyTable跨域问题小结

yizhihongxing

我来详细讲解一下“详解vue-cli项目中的proxyTable跨域问题小结”的完整攻略。

  1. 何为proxyTable?

Vue CLI项目中,如果需要服务端连接API接口进行数据交互,而此时请求的URL与服务端的域名不一致,就会产生跨域问题。解决此类跨域问题,我们通常会在前端环境下进行反向代理。而Vue CLI中则是采用proxyTable来进行跨域请求。

proxyTable这个属性是新增于Vue-CLI@2.x版本的,它可以配置我们需要代理的接口域名,并且在其中设置映射的协议头。使用它的好处是我们不必再自己手动去封装代理功能了。

  1. 如何使用proxyTable?

首先需要在config/index.js文件中找到‘dev’下的配置:

dev: {
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false, // 配置自动打开浏览器
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
proxyTable: {} // 代理/设置协议头等等
},

然后在proxyTable对象里,可以设定要反向代理的请求源地址和目标地址,比如:

proxyTable: {
  '/api': { // 与环境中的API对象融合,实际请求时会自动转化为另一个内容
    target: 'http://localhost:3000', // 设定目标地址
    changeOrigin: true, // 允许跨域(实际上并没有跨域,这是vue-cli给的代理解决方案)
    pathRewrite: { // 重定向路径.
      '^/api': '/api'
    }
  }
}

这是比较基础的代理示例,请求/api下的接口都会被映射到'http://localhost:3000/api'下去。这样我们就可以模拟发起跨域请求了。

  1. proxyTable的高级配置

除了基础配置,proxyTable还有一些高级配置。比如:

/ 配置示例1
proxyTable: {
  '/api':{
    target: 'https://www.demo.com',
    pathRewrite:{
      '^/api': '/api',
    },
    secure: true, // 是否开启https
    changeOrigin: true,
    cookieDomainRewrite: {
      '*': 'localhost' // 把所有的cookies的 域都重写成了 localhost
    },
    onProxyReq:function(proxyReq, req, res){
      // 设置一个header值
      proxyReq.setHeader('Content-Type', 'text/plain;charset=UTF-8');
    },
    onProxyRes:function(proxyRes, req, res){
      // 设置一个header值
      proxyRes.headers['Content-Type'] = 'text/plain;charset=UTF-8';
    },
    onError:function(err, req, res){
      // 错误处理
      res.writeHead(302, {
        'Location': 'https://127.0.0.1/error'
      });
      res.end();
    }
  }
},

// 配置示例2 
proxyTable: {
  '/api':{
    target: 'https://www.demo.com',
    pathRewrite:{
      '^/api': '/api',
    },
    logLevel: 'debug', // 添加代理日志输出操作
    onProxyReq:function(proxyReq, req, res){
      // 向要发给服务端的请求中添加一些额外的请求头信息
      proxyReq.setHeader('Content-Type', 'text/plain;charset=UTF-8');
      proxyReq.setHeader('Test-Header-Type', 'Test-Header-Content');
    },
    onProxyRes:function(proxyRes, req, res){
      // 从代理的响应头中获取数据
      const cookies = proxyRes.headers['set-cookie'];
    },
    onError:function(err, req, res){
      // 错误处理
      res.writeHead(302, {
        'Location': 'https://127.0.0.1/error'
      });
      res.end();
    }
  }
},

通过以上配置示例,我们可以看出,proxyTable配置的常见函数有:

  • target — 请求代理的目标地址
  • changeOrigin — 是否开启跨域请求
  • secure — 是否启动https
  • pathRewrite — 重新映射请求字符串
  • cookieDomainRewrite — 重写cookie域名
  • onProxyReq — 被用于修改请求参数
  • onProxyRes — 被用于修改响应体
  • onError — 被用于处理接口请求被拒绝

总结

通过以上详细讲解,我们可以看出如何在Vue-CLI项目中使用proxyTable来解决跨域问题。为了更好地理解,我提供了一些示例。在实际开发中,我们还可以在proxyTable的高级配置中添加一些自定义的配置来实现更多功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue-cli项目中的proxyTable跨域问题小结 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue将html页面生成高清晰pdf文件的方法

    生成高清晰PDF文件需要用到一些特定的工具和技术。本文将介绍使用 Vue 将 HTML 页面生成高清晰 PDF 文件的方法。 步骤一:安装依赖 我们使用 html2pdf.js 这个开源库将 HTML 页面转换为 PDF 文件。在开始之前,我们需要先安装和引入该库。 npm install html2pdf.js –save 然后,在 Vue 组件中使用以…

    Vue 2023年5月27日
    00
  • 解决Babylon.js中AudioContext was not allowed to start异常问题

    在Babylon.js中播放音频时,有时会出现 “AudioContext was not allowed to start” 异常。这是由于浏览器启用了自动播放策略,导致无法正常启动AudioContext造成的。解决方法是在用户的交互行为中启动AudioContext。下面是解决这个问题的完整攻略: 1. 检查浏览器设置 首先,我们需要检查浏览器的设置,…

    Vue 2023年5月28日
    00
  • Vue中.vue文件比main.js先执行的问题及解决

    在Vue项目中,经常会遇到.vue文件比main.js先执行的问题,并且该问题可能会导致程序运行失败或运行结果异常。下面是解决该问题的完整攻略。 问题描述 在Vue项目的main.js文件中,我们通常使用Vue框架的实例化方法来启动整个应用程序。然而,在某些情况下,我们需要在main.js文件中引入.vue文件,并且在实例化Vue应用程序之前使用该文件中的组…

    Vue 2023年5月28日
    00
  • element-ui图片上传组件查看和限制方式

    下面是element-ui图片上传组件查看和限制方式的完整攻略。 概述 在vue项目中,我们通常使用element-ui组件库来快速构建界面。element-ui封装了很多常用的组件,包括图片上传组件。图片上传组件可以帮助我们方便地上传和查看图片,并且还可以限制上传图片的大小和格式,保证上传图片的质量和量。 下面分别介绍图片上传组件的查看和限制方式。 查看方…

    Vue 2023年5月28日
    00
  • Vue3 Vant组件库使用过程中的避坑点

    下面是详细讲解Vue3 Vant组件库使用过程中的避坑点的完整攻略: 1. 导入组件时注意组件名称 在使用Vant组件库时,要注意组件名称的大小写问题。在Vue3中,组件名称必须采用小写字母加横线的形式。而在Vant组件库中,组件名称采用的是带有大写字母的驼峰式命名。这就需要我们在使用Vant组件时进行一些转换。 例如,在使用Tab栏组件时,如果我们想使用命…

    Vue 2023年5月29日
    00
  • Vue2和Vue3中常用组件通信用法分享

    下面为您详细讲解“Vue2和Vue3中常用组件通信用法分享”的完整攻略。 1. Vue2中常用组件通信方式 在Vue2中,组件通信有以下几种方式: 1. 父子组件传值 通过父组件向子组件传递值,一般使用props属性。 <!– Child.vue 父子组件传值示例 –> <template> <div> {{messa…

    Vue 2023年5月27日
    00
  • 在vue中使用setInterval的方法示例

    在Vue中使用setInterval来执行周期性任务的方法如下: 在Vue组件的mounted钩子函数中,调用setInterval方法设置周期性任务的执行函数和时间间隔,同时将返回的计时器ID保存到组件的data对象中。 <template> <div>{{ count }}</div> </template&gt…

    Vue 2023年5月29日
    00
  • vue中使用 pako.js 解密 gzip加密字符串的方法

    下面是详细讲解vue中使用pako.js解密gzip加密字符串的方法的完整攻略: 准备工作 引入pako.js库 确定gzip加密字符串的编码方式 解密过程 将gzip加密字符串进行base64解码转化成一个UInt8Array类型的数组 let str = "H4sIAAAAAAAAAKvLy0zJzcy00ElVQJDmFhYWFgYGBlJY…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部