当前位置:   article > 正文

Vue | Vue中的Ajax【vue脚手架配置代理服务器 + github案例 + slot插槽 】_脚手架用ajax

脚手架用ajax

解决开发环境Ajax跨域问题

前后端交互通常需要跨域,常用的跨域方法有cors、jsonp、代理服务器

vue脚手架可以通过 devServer.proxy 配置一个代理服务器

说明文档:https://cli.vuejs.org/zh/config/#devserver-proxy

引起跨域问题

  1. 启动服务器获取请求的地址
    在这里插入图片描述
  2. 下载并引入axios
    下载:npm i axios
    引入:import axios from 'axios'
  3. 为了获取学生信息,对 http://localhost:5000 发起Ajax请求
    在这里插入图片描述
  4. 报错,CORS ‘Access-Control-Allow-Origin’ 跨域 违背了同源策略
    在这里插入图片描述
    在这里插入图片描述

目前所处的是 http://localhost:8081/,而发请求联系的是 http://localhost:5000/,引起了跨域问题

  • 什么是代理服务器?
    代理服务器跟我们前端所处的端口号一置,它会把自己伪装与网站同源的地址,所以当它请求完数据返回给前端的时候浏览器就不会拦截
    在这里插入图片描述
  • 如何用脚手架去配置代理服务器

配置代理服务器 方法一

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

    devServer:{
         
      proxy:"http://localhost:5000"
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  2. 然后把脚手架给停掉,然后重新启动
    在这里插入图片描述

  3. 然后再把原先请求的地址改一下,就可以请求到跨域的数据了
    在这里插入图片描述

说明:

  1. 优点:配置简单,请求资源时直接发给前端(8081)即可。
  2. 缺点:不能配置多个代理,不能灵活的控制请求是否走代理。
  3. 工作方式:若按照上述配置代理,当请求了前端不存在的资源时,那么该请求会转发给服务器 (优先匹配前端资源)

注意:不能灵活的控制请求是否走代理
当你请求的资源8081本身就有,他就不会把请求转发给5000
在这里插入图片描述

配置代理服务器 方法二

编写vue.config.js配置具体代理规则:

module.exports = {
   
	devServer: {
   
      proxy: {
   
      '/api1': {
   // 匹配所有以 '/api1'开头的请求路径
        target: 'http://localhost:5000',// 代理目标的基础路径
        changeOrigin: true,
        pathRewrite: {
   '^/api1': ''} // 必须写
      },
      '/api2': {
   // 匹配所有以 '/api2'开头的请求路径
        target: 'http://localhost:5001',// 代理目标的基础路径
        changeOrigin: true,
        pathRewrite: {
   '^/api2': ''} // 必须写
      }
    }
  }
}
/*
   changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000
   changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:8080
   changeOrigin默认值为true
*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

说明:

  1. 优点:可以配置多个代理,且可以灵活的控制请求是否走代理。
  2. 缺点:配置略微繁琐,请求资源时必须加前缀。

步骤一:开启代理服务器
在这里插入图片描述
步骤二:加前缀
在这里插入图片描述

代码

vue.config.js

const {
    defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
   
  transpileDependencies: true,
  lintOnSave: false, // 关闭语法检查
  // 开启代理服务器 (方式一)
  /* devServer: {  
    proxy: 'http://localhost:5000'
    // 这会告诉开发服务器将任何未知请求 (没有匹配到静态文件的请求) 代理到http://localhost:5000
  }, */

  // 开启代理服务器 (方式二)
  devServer: {
   
    proxy: {
   
      '/api': {
    // 匹配所有以 '/api'开头的请求路径
        target: 'http://localhost:5000',
        pathRewrite: {
    '^/api': 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/433012
推荐阅读
相关标签
  

闽ICP备14008679号