vue3.0使用axios 解决跨域问题

本文详细介绍了如何在Vue项目中遇到跨域问题时进行处理,包括使用vue-cli创建项目、安装axios、配置前端和后端跨域,以及SpringBoot中CORS的设置。
摘要由CSDN通过智能技术生成

走了很多弯路,总结出来的,保姆级别教学

直接带你使用,跟着我走,不会报错,如果不行,你来打我。

在请求时,如果出现了以下情况中的任意一种,那么它就是跨域请求:

跨域问题是指在浏览器环境下,当一个网页的脚本试图访问不同源(域名、协议或端口)的资源时,会发生跨域请求。这种问题主要是由于浏览器的同源策略导致的,该策略是为了防止恶意网站获取用户的敏感信息或进行攻击1。跨域问题出现的具体原因包括:

1. 域名不同:浏览器会限制不同域名之间的资源访问。

2. 端口不同:同源策略也包括端口号,因此不同端口的访问也会导致跨域问题。

3. 协议不同:如http和https之间的协议不同也会引发跨域问题2。

一、首先创建vue脚手架

1、打开cmd窗口,将npm包换为淘宝镜像。

npm config set registry https://registry.npm.taobao.org

2、执行npm install -g @vue/cli命令,全局安装脚手架。

3、切换到你要创建项目的目录,然后使用命令创建项目,运行vue create xxx(xxx代表你要创建的项目的名字)。

4、在创建文件的目录下运行npm run serve,得到网址后打开即可看到类似hello world的案例。

二、安装和使用axios

1、安装 :  win+R 打开终端或命令行窗口,输入命令npm install axios

2、使用:

用WebStorm或者Visual Studio Code打开项目 找到main.js

 加入 红色部分

import { createApp } from 'vue'
import App from './App.vue'
import axios from 'axios'

const app = createApp(App);
 
app.config.globalProperties.$http = axios
app.mount('#app')

配置前端跨域

然后找到项目的 vue.config.js 

   加入

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    host: '127.0.0.1',  // 此前端项目的IP地址
    port: 8081,  // 此前端项目的端口号
    open: true,  //表示在启动开发服务器时,会自动打开浏览器并访问指定的地址
    proxy: {
      '/api': {
        target: 'http://127.0.0.1:8080/', //接口域名
        changeOrigin: true,       //是否跨域
        ws: true,            //是否代理 websockets
        secure: true,          //是否https接口
        pathRewrite: {
          '^/api': ''  //假如我们的地址是 /api/member/getToken 会转化为 /member/getToken
        }
      }
    }
  }

})

找到 HelloWorld.vue

 把<template>里面的其余的都删掉,就留这么点用来测试

<template>
  <div class="hello">
    <h1 @click="getName()">{{ msg }}</h1>
  </div>
</template>

script部分

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
    methods:{
        async getName(){
          this.$http.get('/api/member/getToken').then(response => {
              // 请求成功处理
              console.log(response.data);
          }).catch(error => {
              // 请求失败处理
              console.log(error);
          });
      }
    }
}
</script>

扩展: 配置后端跨域 springboot

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Author: xhj
 * @Date: 2023/10/24/13:47
 * @Description:
 */
@Configuration
public class CustomCorsConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("http://localhost:8081") // 允许的来源域名,* 表示允许所有域名
                        .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法
//                        .allowedHeaders("Content-Type", "X-Requested-With") // 允许的请求头
                        .maxAge(3600); // 允许的缓存时间,单位为秒
            }
        };
    }
}

最后运行 成功发送请求

npm run serve

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue项目中使用axios发起跨域请求存在以下几种解决方案: 1. 通过设置proxyTable代理解决跨域 在`config/index.js`中可以找到`dev`下的`proxyTable`属性,可以设置代理规则,如下所示: ``` module.exports = { dev: { // ... proxyTable: { '/api': { target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '^/api': '/mock' // 将/api替换为/mock } } } } } ``` 上面的代码中,代理规则中的`/api`表示需要代理的请求路径,`target`表示代理目标地址,`changeOrigin`表示是否改变请求头中的origin字段,`pathRewrite`表示路径重写规则。 2. 在服务器端设置CORS(跨域资源共享)策略 在服务器端设置CORS策略,允许指定的域名或IP地址访问API。具体的设置方法可以参考服务器框架的文档,比如,如果是使用Express框架,可以通过以下代码启用CORS: ``` const express = require('express') const app = express() app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', 'http://localhost:8080') // 允许访问的域名或IP地址 res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') // 允许的请求方法 res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization') // 允许的请求头 res.header('Access-Control-Allow-Credentials', 'true') // 是否允许发送Cookie next() }) // 其他路由和中间件 ``` 3. 使用JSONP解决跨域 JSONP是一种跨域请求方式,只支持GET请求,但是需要服务器端支持。在Vue中可以使用vue-jsonp插件来实现JSONP请求,具体使用方法可以参考插件文档。 以上三种方法都可以解决Vue项目中使用axios发起跨域请求的问题,选择哪种方法取决于具体的应用场景和服务器端环境。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值