vue/cli 配置动态代理无需重启服务的操作方法

yizhihongxing

当我们使用 vue/cli 搭建项目时,通常需要在本地启动一个开发服务器来开发、调试我们的应用。而有时候,我们需要通过代理的方式请求后端API,而又不想每次修改代理配置都需要重启服务,该如何实现呢?以下是配置动态代理无需重启服务的操作方法的完整攻略:

步骤一:安装http-proxy-middleware

在项目的根目录下,运行以下命令安装 http-proxy-middleware。

npm install --save-dev http-proxy-middleware

步骤二:在 vue.config.js 中配置代理

在项目根目录下创建 vue.config.js 文件,并在文件中编写代理配置。例如:

const proxyMiddleware = require('http-proxy-middleware');

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://api.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        },
        onProxyReq(proxyReq) {
          // 可选:修改请求头
          proxyReq.setHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));
        },
        onProxyRes(proxyRes) {
          // 可选:修改响应头
          proxyRes.headers['X-Custom-Header'] = 'foobar';
        }
      }
    }
  }
}

以上配置中,我们设置了一个代理,将所有以 /api 开头的请求转发到 http://api.example.com。其中,changeOrigin 选项为 true 时,会将请求头中的 Host 字段改为目标服务器的域名。pathRewrite 选项是用于重写 URL 的,默认情况下,代理会将匹配到的路径(即 /api)从请求 URL 中移除,但我们可以通过 pathRewrite 选项来自定义重写规则。onProxyReq 和 onProxyRes 是可选选项,它们提供了在请求发出或响应发回时,修改请求头和响应头的机会。

步骤三:通过重启 npm run serve 命令来使代理配置生效

以上配置完成后,我们需要重启 npm run serve 命令,使代理配置生效。每次修改代理配置(包括路径重写规则、目标服务器地址等),都需要执行这个命令使配置生效。

步骤四:使用 http-proxy-middleware 的 express middleware 使代理配置无需重启服务

我们可以通过使用 http-proxy-middleware 的 express middleware 来使代理配置无需重启服务。在 vue.config.js 中添加以下代码:

const express = require('express');
const proxyMiddleware = require('http-proxy-middleware');

module.exports = {
  devServer: {
    before(app) {
      const apiProxy = proxyMiddleware('/api', {
        target: 'http://api.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        },
        onProxyReq(proxyReq) {
          proxyReq.setHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));
        },
        onProxyRes(proxyRes) {
          proxyRes.headers['X-Custom-Header'] = 'foobar';
        }
      });

      const appProxy = proxyMiddleware('/', {
        target: 'http://app.example.com',
        changeOrigin: true,
        onProxyReq(proxyReq) {
          proxyReq.setHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));
        },
        onProxyRes(proxyRes) {
          proxyRes.headers['X-Custom-Header'] = 'foobar';
        }
      });

      app.use(apiProxy);
      app.use(appProxy);
    }
  }
}

以上代码中,我们使用了 before 函数来添加中间件,在 before 函数中,我们为不同的路径添加了不同的代理,通过 app.use() 方法将代理添加到应用中。这样,当我们修改代理配置时,无需重启服务,配置会立即生效。

示例说明一: 配置静态代理

如果我们想将所有请求都转发到同一个目标服务器,我们可以使用静态代理。在 vue.config.js 中添加以下代码:

const proxyMiddleware = require('http-proxy-middleware');

module.exports = {
  devServer: {
    proxy: 'http://api.example.com'
  }
}

以上配置会将所有请求都转发到 http://api.example.com。但是,由于使用的是静态代理,所以我们必须重启服务才能使配置生效。

示例说明二: 配置动态代理

如果我们想将请求转发到不同的目标服务器,我们可以使用动态代理。在 vue.config.js 中添加以下代码:

const express = require('express');
const proxyMiddleware = require('http-proxy-middleware');

module.exports = {
  devServer: {
    before(app) {
      const apiProxy = proxyMiddleware('/api', {
        target: 'http://api.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      });

      const appProxy = proxyMiddleware('/', {
        target: 'http://app.example.com',
        changeOrigin: true
      });

      app.use(apiProxy);
      app.use(appProxy);
    }
  }
}

以上配置中,我们针对不同的路径设置了不同的目标服务器。当我们修改代理配置时,无需重启服务,配置会立即生效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue/cli 配置动态代理无需重启服务的操作方法 - Python技术站

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

相关文章

  • vue.js click点击事件获取当前元素对象的操作

    获取当前元素对象的操作在Vue.js中是非常常见的需求,这个过程很简单,可以使用事件绑定函数和refs属性组合实现。下面是具体的操作细节。 1. 事件绑定函数 在Vue.js中,使用@click指令可以为元素绑定点击事件,当触发点击事件时就会调用相应的函数,如果需要获取当前元素对象,可以为这个事件绑定一个函数,在函数内使用this关键字获取当前的DOM对象。…

    Vue 2023年5月28日
    00
  • vue源码解析computed多次访问会有死循环原理

    下面是关于“vue源码解析computed多次访问会有死循环原理”的完整攻略。 1. computed的原理 先来简单介绍一下computed的原理。在Vue组件中,computed是指计算属性,是一个基于响应式依赖进行缓存的数据属性,它的值在使用时会自动收集依赖,发现依赖变化时会重新计算,并且将结果缓存起来,直到依赖变化才重新计算。这样就避免了重复计算,提…

    Vue 2023年5月28日
    00
  • Vue使用electron生成桌面应用过程详解

    Vue使用electron生成桌面应用过程详解 1. 概述 Vue.js是一个流行的JavaScript框架,用于构建Web应用程序。而Electron是一个使用JavaScript、HTML和CSS构建跨平台桌面应用程序的工具包。将Vue.js与Electron结合使用,可以快速而简单地构建更为强大的桌面应用程序。 本文将介绍如何使用Vue.js和Elec…

    Vue 2023年5月27日
    00
  • Vue源码学习之关于对Array的数据侦听实现

    这里提供一份 Vue 源码学习关于对 Array 数据侦听实现的完整攻略。 概述 Vue 框架作为数据驱动的 MVVM 框架,在响应式数据更新时能够实现高效的性能优化,是设计优秀的前端框架之一。而在 Vue 的响应式系统中,“对数组的数据侦听”是一个重要的实现细节,它可以实现监听数组数据变化并动态的更新视图。这也是 Vue 与其他前端框架的一个区别。 数组侦…

    Vue 2023年5月29日
    00
  • 使用Webpack提升Vue.js应用程序的4种方法(翻译)

    下面我将详细讲解关于“使用Webpack提升Vue.js应用程序的4种方法”的攻略。我们先来介绍一下使用Webpack的注意事项: 在使用Webpack时,我们需要选择不同的Webpack配置文件,以适应不同的应用程序需求。此外,在使用Webpack时,合理配置各种Webpack的插件和组件也非常重要,这样可以是我们的应用程序能够正常运行,更加高效。 现在,…

    Vue 2023年5月27日
    00
  • 一步步从Vue3.x源码上理解ref和reactive的区别

    当我们在使用Vue3.x的时候,ref和reactive这两个API很常用,但是也经常容易搞混。这篇攻略将介绍ref和 reactive的区别,并且通过源码分析来更加深刻理解这两者之间的差异。 1. reactive reactive是用于将对象转为响应式的API。我们一般使用这个API来将普通的对象转成可以响应式地监听的对象。使用方法如下所示: impor…

    Vue 2023年5月28日
    00
  • vue中实现路由跳转的三种方式超详细教程

    接下来我将为你详细讲解“vue中实现路由跳转的三种方式超详细教程”。 背景介绍 Vue是一款流行的JavaScript框架。Vue Router是Vue的官方路由管理器。在Vue中,可以使用Vue Router实现页面路由跳转。 本教程将介绍Vue Router中实现路由跳转的三种方式。这三种方式分别是: 使用<router-link>标签进行跳…

    Vue 2023年5月29日
    00
  • 一文搞懂Vue3中watchEffect侦听器的使用

    下面是详细讲解: 一文搞懂Vue3中watchEffect侦听器的使用 简介 在Vue3中,watchEffect是一个侦听器函数,它接收一个响应式数据对象,并在该对象发生变化时执行指定的callback函数。相比于Vue2的watch,它是基于响应式数据的,不需要指定要侦听的属性名,当数据变化时立刻执行回调。watchEffect的使用可以让你更加灵活地监…

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