vue-cli
创建项目后,使用 axios 请求后端接口,需要请求后端接口时,报了跨域的问题,具体错误如下
Access to XMLHttpRequest at 'http://localhost:3000/getData'
from origin 'http://localhost:3000' has been blocked by CORS policy:
Request header field access-control-allow-origin is not allowed
by Access-Control-Allow-Headers in preflight response.
看到这个错误时候一脸懵逼,无从下手,后面查阅了一下,发现这个错误是因为 vue-cli 需要配置跨域代理,配置如下
我们先找到 vue.config.js
或者 webpack.config.js
文件
找到 devServer
配置项,新增 proxy
代理
devServer: {
open: true,
host: "localhost",
port: 3000,
https: false,
proxy: {
'/api': {
target: "https://abc.com/",
changeOrigin: true,
pathRewrite:{
'^/api':'/'
}
}
}
}
changeOrigin 配置
默认情况下,代理时会保留主机头的来源,可以将 changeOrigin 设置为 true 以覆盖此行为。
pathRewrite 配置
pathRewrite
用来改写请求路径,上面的配置意思是,当请求 localhost:3000/api/getData
,会把 api
移除掉,然后把 getData
拼接到 https://abc.com/getData
所以请求 localhost:3000/api/getData
,会转发到 https://abc.com/getData
这个接口上
总结
开发不仅可以通过 proxy 来设置代理,也可以通过服务端配置 access-control-allow-origin: * 来实现,这样前端就不需要配置 proxy 代理了