vue设置代理不起作用问题及解决

vue设置代理不起作用

使用vue写前端界面时,需调用后端接口展现查询的数据,于是设置代理实现跨域,在config/index.js中添加代理,代码如下:

proxyTable:{
      // 匹配 /dev-api 开头的请求, 比如:A网站:https://localhost:8888 中的index.html 页面发送AJax请求:/dev-api/data.json
      'dev-api': {
        target:'http://localhost:3001',
        // 开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,
        // 并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
        changOrigin: true, //开启代理
        pathRewrite: {
            "^/dev-api": ''
        }
      }
    },

运行后发现报错404

在这里插入图片描述

测试后端接口无问题,着重看代理部分代码,百度后发现 “dev-api"前面应加”/",

否则会出现上述错误。

完整代码如下:

proxyTable:{
      // 匹配 /dev-api 开头的请求, 比如:A网站:https://localhost:8888 中的index.html 页面发送AJax请求:/dev-api/data.json
      '/dev-api': {
        target:'http://localhost:3001',
        // 开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,
        // 并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
        changOrigin: true, //开启代理
        pathRewrite: {
            "^/dev-api": ''
        }
      }
    },

除此之外,修改代理后应重启一下,否则修改内容不生效。

vue配置代理方式

正向代理配置

环境配置文件 .env.development

ENV = 'development'
VUE_APP_BASE_API="/dev-api"

vue配置文件 vue.config.js

devServer: {
    proxy:'http://localhost:8080'//所有的接口请求都会被代理到这个路径上
},
devServer: {
    proxy:{
        '/dev-api':{//只要是这个路径下的请求都会被代理到target中
            target:'http://localhost:8888',
            pathRewrite:{'^/dev-api':''}//路径重写:/dev-api路径将不会出现,如果改成'^/dev-api':'test',则重写的路径/dev-api会变成test
        }
    }
},

注意点:使用正向代理时,不要手动的写全路径,不要手动的写全路径,不要手动的写全路径,(重要的事情说三遍)写了全路径则代理失效

全路径:http://localhost:8080 即:协议、域名、端口

只要写一个代理路径即可:VUE_APP_BASE_API =/dev-api

环境变量配置文件

你可以在你的项目根目录中放置下列文件来指定环境变量:

.env                # 在所有的环境中被载入
.env.local          # 在所有的环境中被载入,但会被 git 忽略
.env.[mode]         # 只在指定的模式中被载入
.env.[mode].local   # 只在指定的模式中被载入,但会被 git 忽略
# mode 代表环境变量:development、production和test。不同的文件名在不同的环境下自动生效

请注意,只有 NODE_ENV,BASE_URL 和以 VUE_APP_ 开头的变量将通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中。

这是为了避免意外公开机器上可能具有相同名称的私钥。

目录

.env.production//生产环境配置
.env.develoption//开发环境配置

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

你可能感兴趣的:(vue设置代理不起作用问题及解决)