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

我来详细讲解一下“详解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自定义指令用法经典实例小结

    下面是“vue自定义指令用法经典实例小结”的完整攻略: 什么是Vue自定义指令 Vue自定义指令是指Vue.js提供的一种扩展语法,通过它可以自定义具有特定功能的指令,例如自定义一个v-focus指令,用来设置DOM元素获得焦点,而不需要在Vue组件的methods中定义一堆逻辑代码。 Vue自定义指令的两种类型 Vue自定义指令分为两种类型: 全局指令:作…

    Vue 2023年5月27日
    00
  • vue打包项目版本号自加的操作步骤

    下面是对“Vue打包项目版本号自加的操作步骤”的完整攻略: 1. 在package.json中设置版本号 在进行打包操作之前,需要在package.json文件中对项目的版本号进行设置。 { "name": "my-project", "version": "1.0.0", //…

    Vue 2023年5月28日
    00
  • idea项目debug模式无法启动的解决

    针对“idea项目debug模式无法启动”的问题,我们可以尝试以下措施解决: 1. 检查项目依赖 在使用idea进行项目开发时,如果项目依赖有问题,可能会导致debug模式启动失败。这时我们可以尝试检查一下项目依赖的问题,具体步骤如下: 在idea中打开对应项目 点击菜单栏上的File -> Project Structure 在弹出的窗口中,点击左侧…

    Vue 2023年5月28日
    00
  • Vue3.2单文件组件setup的语法糖与新特性总结

    下面是详细讲解“Vue3.2单文件组件setup的语法糖与新特性总结”的完整攻略。 Vue3.2单文件组件setup的语法糖与新特性总结 简介 在Vue 3.0中,使用Composition API可以实现更高效、更灵活的编码方式。而在Vue 3.2版本中,新增了setup语法糖和其他新特性,极大地简化了开发setup函数的方式。 setup语法糖 ❌ Vu…

    Vue 2023年5月28日
    00
  • Element Timeline时间线的实现

    为了讲解Element Timeline时间线的实现完整攻略,我将会按照如下步骤进行说明: 介绍时间线基本结构 讲解时间线的实现原理 提供两个示例说明 时间线基本结构 Element Timeline时间线组件所展示的时间轴是由一个一个时间块构成的,每个时间块代表一个时间节点,在这个时间节点上可以展示一些与该节点有关的内容。时间块的基本结构如下: <e…

    Vue 2023年5月29日
    00
  • 浅谈Vue的组件间传值(包括Vuex)

    下面就为您详细讲解“浅谈Vue的组件间传值(包括Vuex)”的完整攻略: 一、组件间传值 在Vue中,父组件可以通过属性(prop)的方式向子组件传递数据,而子组件则可以通过事件($emit)的方式向父组件发送数据,从而实现组件间的数据传递。 1.1 父组件向子组件传值 在父组件中,通过在子组件标签上添加属性来向子组件传递数据,例如: <templat…

    Vue 2023年5月28日
    00
  • 浅谈vue 单文件探索

    浅谈 Vue 单文件探索 什么是 Vue 单文件? 在介绍 Vue 单文件之前,我们需要先了解 Vue 单文件组件,简称为 Vue 组件。Vue 组件是 Vue.js 中一项重要的功能,用于将页面拆分成独立可复用的部分,并通过组合这些部分来构建复杂的应用程序。 而 Vue 单文件则是对 Vue 组件进行组织和管理的方式。Vue 单文件使用 .vue 后缀名,…

    Vue 2023年5月28日
    00
  • Vue3+script setup+ts+Vite+Volar搭建项目

    下面详细讲解如何使用Vue3+script setup+ts+Vite+Volar搭建项目: 1. 安装Vite 首先需要安装最新的Vite,可以通过以下命令进行安装: npm install -g vite 2. 创建项目 Vite有一个快捷的命令可以帮助我们快速创建一个Vue3项目,只需要执行以下命令: npm init vite-app my-proj…

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