vue修改proxyTable解决跨域请求,报404的问题及解决

 更新时间:2023年07月04日 09:51:20   作者:bdmh  
这篇文章主要介绍了vue修改proxyTable解决跨域请求,报404的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue修改proxyTable解决跨域请求,报404解决

环境

vue前端和后端接口部署在同一台机器。

vue服务部署在 http://localhost:8081,后台服务部署在 http://localhost:8080,可以看到端口是不一样的,在vue通过以下方式请求:

export default {
    name:'Condition',
    data(){
        return{
            options:[]
        }
    },
    created:function(){
        this.getdata();
    },
    methods:{
        getdata(){
            this.$axios({
                method:'get',
                url:'http://localhost:8080/college/getcollege'
                }).then(resp => {
                    this.options = resp.data.data.list;
                    console.log(resp.data);        
                }).catch(resp => {
                    console.log('请求失败:'+resp.status+','+resp.statusText);
                });
        }
    }
}

因为端口不一致,axios就会认为是跨域了,所以就会报错:

Access to XMLHttpRequest at 'http://localhost:8080/college/getcollege' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. [http://localhost:8081/#/]

这里只介绍通过修改config中的index.js文件中的proxyTable的配置去解决的方法。在网上随便搜一下,基本都是如下的内容:

        proxyTable: {
            "/api": {
                target: "http://localhost:8080",
                changeOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            }
        },

修改后,绝大部分人都会遇到404的错误,如下:

the server responded with a status of 404 (Not Found) [http://localhost:8081/college/getcollege

奇怪吧,明明设置了代理,怎么没有生效呢?不是方法不对,而是没有理解proxyTable中节点的意义。

其中的“api”节点,这是路由,系统会去根据这个匹配你的地址,匹配上才会生效,proxyTable中可以指定多个路由,一开始会认为这个是规定格式,所以都不会去修改,除非你的api部署地址是这样的“http://localhost:8080/api/*”,恭喜你,你的问题可能解决了,但是根据我的地址是“http://localhost:8080/college/getcollege”,就完蛋了,那么该怎么改,如下:

        proxyTable: {
    //碰到college路由就会起作用了
            "/college": {
                target: "http://localhost:8080",
                changeOrigin: true,
    //重定向,一般可以不用写,或者值写出空''
                pathRewrite: {
                    '^/college': '/college'
                }
            }
        },

OK,问题解决。

vue的proxyTable跨域处理

当我们请求的地址出现不符合同源策略的时候,就会出现跨域的问题,这里仅对在vue 项目中使用axions请求跨域做记录

跨域报错截图

在这里插入图片描述

案例:请求"https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=10"中的数据

分析

问号(?)之前的为我们要请求的后端地址,包含协议、域名、地址等等问号(?)之后的内容为我们需要提交的参数,参数之间用&连接

解决方案

1、配置跨域

在项目中与src同级下有一个config文件夹,打开这个文件夹中的index.js文件

在这里插入图片描述

在index.js文件的 module.exports 中的 dev 中的 proxyTable 进行跨域配置

module.exports = {
  dev: {
  ...
    proxyTable: {
      '/api': {  //这里的/api,就是我们在target里写的要请求的后端接口
        target: 'https://cn.bing.com/', 
        //要请求的后端接口地址,一般写多个数据接口的共同内容,后面的地址根据请求数据的不同,在请求的时候再拼接上就好
        changeOrigin: true, //是否允许跨越
        pathRewrite: {
          '^/api': '', //重写,一般情况下不需要
        }
      }
    },
    // Various Dev Server settings
    host: 'localhost', // can be overwritten by process.env.HOST
    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be 
  },
  ...
}

2、使用axios请求数据

methods:{
getData(){
axios
    .get("/api/HPImageArchive.aspx", {   
       params: {
         format: "js",
         idx: 0,
         n: 1
       }
     })
     .then(function(response) {
       console.log(response);
     })
     .catch(function(error) {
       console.log(error);
     });
 }
}
 //get:请求方式 
 // "/api/HPImageArchive.aspx":请求地址,这里的api一定不能忘记,它代表着我们在请求地址前面部分
 // params: 我们需要带上的参数就写这个对象中
 //.then: 请求成功之后,要执行的代码块
 //.catch: 请求失败之后,需要执行的代码块

注意事项 在配置好跨域之后,请求的时候,一定不要忘记在前面加上/api如果有修改congfig中的配置,一定记得重启服务,否则你的修改浏览器可能不会给于响应,让你白忙活半天如果自己觉得都没有问题还一直不成功,记得打开network进行查看,不要一味的盯着自己的代码和报错在network中,可以查看自己的请求地址是否有误,需要携带的参数是否有带上,以及参数是否正确

在这里插入图片描述

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue双向绑定的简单实现

    vue双向绑定的简单实现

    这篇文章主要为大家详细介绍了vue双向绑定的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • vue elementui 实现搜索栏子组件封装的示例代码

    vue elementui 实现搜索栏子组件封装的示例代码

    这篇文章主要介绍了vue elementui 搜索栏子组件封装,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 通过html文件来使用Vue的单文件组件形式详解

    通过html文件来使用Vue的单文件组件形式详解

    这篇文章主要介绍了通过html文件来使用Vue的单文件组件形式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 如何使用Gitee Pages服务 搭建Vue项目

    如何使用Gitee Pages服务 搭建Vue项目

    这篇文章主要介绍了如何使用Gitee Pages服务 搭建Vue项目,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue.js高效前端开发

    Vue.js高效前端开发

    Vue是构建Web界面的JavaScript库,原称为Vue.js,它可以通过简洁的API来提供高效的数据绑定和灵活的组件系统,本文详细介绍了Vue的使用安装和相关知识,有兴趣的同学可以参考借鉴
    2023-03-03
  • vue页面加载闪烁问题的解决方法

    vue页面加载闪烁问题的解决方法

    这篇文章主要介绍了vue页面加载闪烁问题的解决方法,文中给大家提到了v-if 和 v-show 的区别,解决vue页面加载时出现{{message}}闪退的两种方法,感兴趣的朋友一起看看吧
    2018-03-03
  • 解决element-ui table设置列fixed时X轴滚动条无法拖动问题

    解决element-ui table设置列fixed时X轴滚动条无法拖动问题

    这篇文章主要介绍了解决element-ui table设置列fixed时X轴滚动条无法拖动问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue.js学习示例分享

    Vue.js学习示例分享

    本篇和大家分享的是学习Vuejs的总结和调用webapi的一个小示例;具有一定的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • vue实现在data里引入相对路径

    vue实现在data里引入相对路径

    这篇文章主要介绍了vue实现在data里引入相对路径,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)

    Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)

    这篇文章主要介绍了Vue项目中使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论