当前位置: 首页 > news >正文

Vue学习第19天——vue脚手架配置代理

目录

  • 一、什么是配置代理
    • 1、vue官方文档解释
    • 2、理解
    • 3、语法
  • 二、案例练习
    • 1、创建包含学生数据的服务器server1
    • 2、开启server1服务器
    • 3、开启代理服务器
    • 4、通过ajax发送网络请求获取数据
    • 5、在以上代码的基础上改进配置代理
      • ① 、通过ajax发送请求时更改一下路径
      • ② 、在vue.config.js中添加配置代理规则
  • 四、总结
    • ① 方法一:在vue.config.js中添加以下配置
    • ② 方法二:在vue.config.js中配置具体代理规则

一、什么是配置代理

1、vue官方文档解释

如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器。这个问题可以通过 vue.config.js 中的 devServer.proxy 选项来配置。

2、理解

项目中需要跨域请求服务器数据,可以通过vue脚手架的配置代理完成

3、语法

在vue.config.js中添加如下配置:

devServer: {
	proxy: 'http://localhost:4000'
}

二、案例练习

需求:点击button按钮从服务器中获取学生数据

1、创建包含学生数据的服务器server1

服务地址为:http://localhost:5000/students

const express = require('express')
const app = express()

app.use((request,response,next)=>{
	console.log('有人请求服务器1了');
	next()
})

app.get('/students',(request,response)=>{
	const students = [
		{id:'001',name:'tom',age:18},
		{id:'002',name:'jerry',age:19},
		{id:'003',name:'tony',age:120},
	]
	response.send(students)
})

app.listen(5000,(err)=>{
	if(!err) console.log('服务器1启动成功了,请求学生信息地址为:http://localhost:5000/students');
})

2、开启server1服务器

开启cmd指令,输入如下代码

node server1

3、开启代理服务器

在vue.config.js中添加(注意,这里为服务器server1的地址)

  devServer: {
    proxy: 'http://localhost:5000'
  }

4、通过ajax发送网络请求获取数据

下载ajax:npm i ajax
引入ajax:import axios from "axios"
注意:这里的url地址为http://localhost:8080/students

<template>
  <div id="app">
    <button @click="getStudent">获取学生信息</button>
    <ul>
      <li v-for="student in studentsMsg" :key="student.id">
        <span>班级学号:{{student.id}}</span>&nbsp;&nbsp;&nbsp;
        <span>学生姓名:{{student.name}}</span>&nbsp;&nbsp;&nbsp;
        <span>学生年龄:{{student.age}}</span>
      </li>
    </ul>
  </div>
</template>

<script>
//下载axios,并引入
import axios from "axios";
export default {
  name: 'App',
  data(){
    return {
      studentsMsg:[]
    }
  },
  methods:{
   async getStudent(){
    this.studentsMsg= await axios.get("http://localhost:8080/students").then(
        response =>{
          return response.data
        },
        error=>{
          console.log(error.message);
        }
      );
    }
  }
}
</script>

运行前后对比
在这里插入图片描述
以上方法配置代理的缺点
1、不能配置多个代理
2、不能灵活的控制请求是否走代理,即当8080端口根目录存在sutdent文件时,会直接从自身根路径获取资源,而不再走配置代理

5、在以上代码的基础上改进配置代理

更改以下两个地方,其余代码不边

① 、通过ajax发送请求时更改一下路径

axios.get("http://localhost:8080/students")换成axios.get("http://localhost:8080/api/students")

② 、在vue.config.js中添加配置代理规则

  devServer: {
   '/api': { //匹配所有以'/api'开头的请求路径
        target: 'http://localhost:5000', //代理目标的基本路径
        pathRewrite:{'^/api':''} //重写路径
        ws: true, //开启ws, 如果是http代理此处可以不用设置
        changeOrigin: true, //伪装路径
    },
  }

以上配置的优势:
1、可以配置多个代理
2、可以灵活控制请求是否走代理

四、总结

配置代理有两种方法

① 方法一:在vue.config.js中添加以下配置

//开启代理服务器
module.exports = {
	devServer: {
		proxy: 'http://localhost:4000'
	}
}

工作方式:
优先匹配前端资源
如果请求了前端存在的静态文件,则请求不再转发开发服务器
如果请求了前端不存在的静态文件,那么请求会转发给开发服务器
优点:
配置简单,请求资源时直接发送前端8080即可
缺点:
不能配置多个代理,不能灵活的控制请求是否走代理

② 方法二:在vue.config.js中配置具体代理规则

module.exports = {
  devServer: {
    proxy: {
      '/api': { //匹配所有以'/api'开头的请求路径
        target: '<url>', //代理目标的基本路径
        pathRewrite:{'^/api':''} //重写路径
        ws: true, //开启ws, 如果是http代理此处可以不用设置
        changeOrigin: true, //伪装端口
      },
      '/foo': { //匹配所有以'/foo'开头的请求路径
        target: '<other_url>'
      }
    }
  }
}

《1》配置项说明:
target:后端接口的域名
pathRewrite:重写路径
ws: 如果要代理 websockets,配置这个参数,如果是http代理不用设置
changeOrigin:默认值为true,用于控制请求头中的host值
《2》举例说明:
前端服务器http://localhost:8080/students:后端数据接口:http://localhost:5000/students
我的 api=‘/demo’,
只要请求头以api开头,就转发给5000端口的服务器,
当node服务器遇到 以 ‘/demo’ 开头的请求,就会把 target 字段加上,那么我的请求地址就为 http://localhost:5000/demo/student
pathRewrite 表示的意思是 把/demo 替换为空,那么我的请求地址就为 http://localhost:5000/student

《3》优点:
可以配置多个代理,且可以灵活控制请求是否走代理
《4》缺点:
配置略微复杂,请求资源时必须加前缀

相关文章:

  • day13学习总结
  • K8s基础知识总结及常用基本关键命令
  • 内创业革命
  • 【番外篇】如何制作慕斯蛋糕
  • ps2022 - add text
  • 刷题记录:NC208813求逆序数
  • 遗传算法GA求解连续函数问题
  • React(11)-全局共享通信Context
  • 搞脑筋的日历积木
  • Samba+ldap认证
  • 第一章 赛前准备工作
  • 周末学习总结(LIO标定+kitti数据集的使用+evo工具的使用+开源数据集+ssh的使用)
  • 计算机组成原理_Cache与主存的映射方式
  • 2002/9/3
  • wordpress获取登录权限后获取shell的方法
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CEF与代理
  • HTTP 简介
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • js学习笔记
  • MobX
  • mysql 5.6 原生Online DDL解析
  • Nacos系列:Nacos的Java SDK使用
  • spark本地环境的搭建到运行第一个spark程序
  • SSH 免密登录
  • 从输入URL到页面加载发生了什么
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 简单数学运算程序(不定期更新)
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 一个完整Java Web项目背后的密码
  • 白色的风信子
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​一些不规范的GTID使用场景
  • #Lua:Lua调用C++生成的DLL库
  • #QT(一种朴素的计算器实现方法)
  • #单片机(TB6600驱动42步进电机)
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (篇九)MySQL常用内置函数
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)3D模板阴影原理
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .gitignore文件_Git:.gitignore
  • .NET Core 版本不支持的问题
  • .NET Core 项目指定SDK版本
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 中viewstate的原理和使用
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • ::什么意思
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [Android] Implementation vs API dependency
  • [Android]使用Android打包Unity工程
  • [AR Foundation] 人脸检测的流程