vue中的axios和proxy代理

  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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用Axios进行跨域请求的方法如下: 1. 首先,安装Axios库。可以通过npm或者yarn进行安装,可以在项目根目录下的终端运行以下命令进行安装: ```bash npm install axios ``` 或者 ```bash yarn add axios ``` 2. 在需要发送跨域请求的组件,导入Axios: ```javascript import axios from 'axios'; ``` 3. 使用Axios发送跨域请求。在需要发送请求的地方,可以使用Axios提供的get、post等方法发送请求。 ```javascript axios.get('http://example.com/api/data', { headers: { 'Content-Type': 'application/json', // 设置请求头,根据实际情况修改 }, }) .then(response => { // 请求成功后的处理逻辑 console.log(response.data); }) .catch(error => { // 请求失败后的处理逻辑 console.error(error); }); ``` 在以上代码,`http://example.com/api/data`是你要请求的接口地址,你需要根据实际情况进行修改。`headers`可以设置请求头,根据实际情况修改。 4. Vue CLI开发环境下的跨域配置。如果你是在Vue CLI创建的项目开发,可以通过在项目根目录下的`vue.config.js`文件进行跨域配置。 ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://example.com', // 代理目标地址 changeOrigin: true, // 是否改变请求源地址 pathRewrite: { '^/api': '', // 去掉请求路径的/api前缀 }, }, }, }, }; ``` 在以上配置,`/api`是你的请求路径前缀,`http://example.com`是你的目标地址,你需要根据实际情况进行修改。 通过以上方法,你就可以在Vue项目使用Axios发送跨域请求了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值