vue之proxyTable代理超全面配置流程

Vue之proxyTable代理超全面配置流程

概述

Vue.js 是一个构建数据驱动的 web 界面的渐进式框架,使用 Vue 开发前端项目时,经常遇到需要向后端接口发起 HTTP 请求的情况。由于前端和后端常常处于不同的服务器上,因此需要解决跨域的问题。本文将介绍在 Vue 项目中使用 proxyTable 进行接口代理的配置流程。

步骤

步骤一:在webpack配置文件中进行proxyTable的配置

Vue CLI 生成的项目通常使用的是 webpack 对前端资源进行打包和构建。我们需要在项目根目录下找到 build/webpack.dev.conf.js 文件,在这个文件中增加代理配置。示例代码如下:

module.exports = {
  // ...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8888',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },
    // ...
  }
}
  • /api:表示匹配到以 /api 开头的请求路径(例如 /api/user
  • target:设置目标服务器的地址,这里表示代理到本地 8888 端口
  • changeOrigin:是否改变源端口号,例如本地开发时需要将请求发送到服务器(target指定)的/api路径上,那么需要将此项设置为 true,否则设置为 false
  • pathRewrite:用于将匹配到的路径重写,这里表示将 /api 重写为 ''(空字符串)

步骤二:在前端代码中发起请求

经过了代理配置,我们在前端页面中发起请求的时候,只需要将请求发到代理服务器的地址上就行了,例如:

axios.get('/api/user').then((res) => {
  // ...
})

这样的方式,请求会被代理服务器转发到目标服务器的 /user 路径。在前端代码中,我们只需要关心请求到的是 /api 路径上的资源,而对于跨域问题的解决,全部交给了代理服务器去处理。

常见问题

1. 代理服务器和目标服务器都在同一个地方,是否也需要进行代理设置?

在同一台机器上的前端和后端代码使用代理服务器进行请求的话,这种情况下,是没有必要进行代理设置的。可以直接使用接口路径进行请求,这种情况下不会存在跨域问题。

2. 代理服务器和目标服务器不在同一个地方,如何解决证书问题?

在开发中,使用的证书通常是自签名的,在代理服务器上进行转发时可能会出现证书问题导致请求被错误拦截。此时,需要在代理服务器上添加以下代码:

httpsAgent: new https.Agent({
  rejectUnauthorized: false
})

示例代码:

module.exports = {
  // ...
  devServer: {
    proxy: {
      '/api': {
        target: 'https://www.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        },
        httpsAgent: new https.Agent({
          rejectUnauthorized: false
        })
      }
    },
    // ...
  }
}

这样就可以设置代理服务器不验证 SSL 证书。

示例说明

示例一:代理服务器和目标服务器位于同一个主机

假设代理服务器部署在 localhost3000 端口,目标服务器部署在 localhost8888 端口,我们可以采用以下配置:

module.exports = {
  // ...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8888',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },
    // ...
  }
}

这样,在前端代码中,只需要将请求发往代理服务器即可:

axios.get('/api/user').then((res) => {
  // ...
})

示例二:代理服务器和目标服务器不在同一台机器

假设代理服务器部署在 localhost3000 端口,目标服务器部署在外网,我们可以采用以下配置:

module.exports = {
  // ...
  devServer: {
    proxy: {
      '/api': {
        target: 'https://www.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        },
        httpsAgent: new https.Agent({
          rejectUnauthorized: false
        })
      }
    },
    // ...
  }
}

这样,在前端代码中,只需要将请求发往代理服务器即可:

axios.get('/api/user').then((res) => {
  // ...
})

总结

通过配置 proxyTable 代理,我们可以将前端应用和后端接口分离,从而专注于开发和维护自己的模块。在开发时,我们可以直接使用接口路径进行请求,而不必关心跨域等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue之proxyTable代理超全面配置流程 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 一文带你初识java中的String类

    一文带你初识Java中的String类 介绍 Java中的String类是一个很重要和常用的类,它代表了字符串对象。String类是不可变的,这意味着一旦字符串对象被创建,它的值就不能被改变。本文将介绍Java中String类的基本用法。 创建String对象 Java中有两种方式创建String对象。 直接赋值 String str = "hel…

    Java 2023年5月26日
    00
  • jsp页面调用applet实现人民币的大小写转换

    下面是jsp页面调用applet实现人民币的大小写转换的完整攻略,包含以下几个步骤: 1. 编写Java Applet代码 Java Applet是一个嵌入到HTML文档中的Java程序,具有跨平台性和安全性。Applet中的代码需继承Applet类,实现init()、paint()等方法。以下是一个简单的Java Applet代码示例,用于实现人民币金额大…

    Java 2023年6月15日
    00
  • Scala文件操作示例代码讲解

    我们来详细讲解一下“Scala文件操作示例代码讲解”的完整攻略。 概述 在Scala程序中,文件操作是非常常见的操作。Scala提供了一些简单易用的API帮助我们在程序中进行文件操作。本攻略将会详细讲解如何在Scala程序中进行简单的文件操作,包括如何读取文件、写入文件、拷贝文件和删除文件。 读取文件 Scala的io包中提供了File类,可以用来表示文件或…

    Java 2023年5月20日
    00
  • Java中的程序计数器是什么

    Java中的程序计数器是一种内存区域,它可以记录程序当前执行的位置,以便执行下一条指令。程序计数器在Java虚拟机中扮演了非常重要的角色,它是Java多线程程序中的一种线程私有的内存空间,也是Java虚拟机规范中定义的六大内存区域之一。 程序计数器主要的作用有两个: 确保线程的恢复。程序计数器可以记录线程在执行Java字节码的过程中的位置,当线程因为时间片结…

    Java 2023年5月23日
    00
  • 如何实现线程安全的算法?

    以下是关于线程安全的算法的完整使用攻略: 什么是线程安全的算法? 线程安全的算法是指在多线程环境下,多个线程可以同时访问算法而不会出现数据不一致或程序崩溃等问题。在线程编程中,线程安全的算法是非常重要的,因为多个线程同时访问算法,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的算法? 为实现线程安全的算法需要使用同步机制来保证多线程对算法…

    Java 2023年5月12日
    00
  • Spring Boot 访问安全之认证和鉴权详解

    Spring Boot 访问安全之认证和鉴权详解 在Spring Boot应用中,实现访问安全、认证和鉴权是非常重要的。本文将详细讲解Spring Security的使用,使开发人员能够更好地掌握如何使用Spring Boot实现访问安全。 前置知识 在开始学习Spring Security之前,需要先掌握以下知识: Spring Boot的基础知识 Mav…

    Java 2023年5月20日
    00
  • Java面向对象编程之类的继承详解

    Java面向对象编程之类的继承详解 什么是继承? 继承是一种面向对象编程的重要特性,它可以让一个类(子类)拥有另一个类(父类)的所有方法和属性。 在Java中,使用关键字extends来实现继承。 继承的语法 public class ChildClass extends ParentClass { // 子类的内容 } 在以上语法中,我们定义了一个名为Ch…

    Java 2023年5月26日
    00
  • java基础详解之数据类型知识点总结

    Java基础详解之数据类型知识点总结 一、Java中的数据类型 Java中的数据类型可以分为两大类: 基本数据类型(Primitive Types):包括整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)四种。 引用数据类型(Reference Types):包括类、接口、数组等。…

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