vue中的axios和proxy代理

本文介绍了在Vue项目中如何引入axios库,通过配置proxy代理解决跨域问题。详细阐述了axios的使用,包括二次封装,添加请求和响应拦截器,以及封装接口调用的过程。同时,解析了proxy代理的工作原理,说明了'/api'前缀在代理中的作用和pathRewrite如何重写路径,确保请求正确地发送到实际接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 引入axios

npm install axios
  1. 配置proxy代理,解决跨域问题

proxyTable: {
      "/api": {
        target: "http://192.168.X.XXX:XXXX", //需要跨域的目标
        pathRewrite: { "^/api": "" }, //将带有api的路径重写为‘’
        ws: true, //用与支持webCocket
        changeOrigin: true //用于控制请求头的Host
      },
    "/two": {
        target: "http://XXX.XXX.X.XXX:XXXX", 
        pathRewrite: { "^/two": "" }, 
        ws: true, 
        changeOrigin: true 
      }
    },
  1. 引入axios,二次封装,添加请求、响应拦截器

import axios from "axios";

const requests = axios.create({//创建
  baseURL: "/api", //在调用路径中追加前缀‘/api’
  timeout: 50000 //单位ms,超过该时间即为失败
});

//添加请求拦截器
requests.interceptors.request.use(
  function(config) {
    config.headers.token ="token";//在发送请求之前的行为,加入token
    return config;
  },
  function(error) {
    //处理错误请求
    return Promise.reject(error);
  }
);

//添加响应拦截器
requests.interceptors.response.use(
  function(response) {
    //成功接收到响应后的行为,例如判断状态码
    return response;
  },
  function(error) {
    //处理错误响应
    return error;
  }
);

export default requests;
  1. 封装接口调用

import request from "./request";

export function getData(){
    return request({
        url:'/getUser',//
        method:'get'
    })
}
  1. vue中调用接口

<template>
  <div>
    <p><router-link to="/">回到首页</router-link></p>
    <h1>axios测试</h1>
  </div>
</template>

<script>
import {getData} from "@/api/index.js"
export default {
  data() {
    return {}
  },
  mounted(){
    console.log("开始了")
    this.fetchData()
  },
  methods:{
    async fetchData(){
        let result = await getData()
        console.log(result)
    }
  }
}
</script>
<style scoped>
</style>

控制台成功调用:

  1. 地址变化过程

①实际登录接口:http://192.168.x.xxx:xxxx/getUser

…中间省略了配置过程…

②npm run serve:Local: http://localhost:8080/

③点击后发送的登录请求:http://localhost:8080/api/getUser

http://localhost:8080会加上'/getUser'=>http://localhost:8080/getUser,因为创建axios时加上了“/api前缀”=》http://localhost:8080/api/getUser

④代理中“/api” 的作用就是将/api前的"localhost:8080"变成target的内容http://192.168.x.xxx:xxxx/

⑤完整的路径变成了http://192.168.x.xxx:xxxx/api/getUser

⑥实际接口当中没有这个api,此时pathwrite重写就解决这个问题的。

⑦pathwrite识别到api开头就会把"/api"重写成空,那就是不存在这个/api了,完整的路径又变成:http://192.168.x.xxx:xxxx/getUser

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值