2020-05-22|2020-05-22 Vue跨域请求怎么做(vue-cli 3.0)
现在公司基本都是前后端分离为主,使用 Vue 搭建的项目在本地与调用后端提供的 api 时,因为是使用 node 运行服务器,IP与后端不一致,所以会产生跨域问题。耳熟能详的跨域手段一般是JSONP,CORS什么的,而 Vue 已经帮我们配置好了,只需在 vue.config.js 设置一下就行了
注:vue-cli 版本是2.0左右的会有 webpack 的 config 目录,
而 vue-cli 版本是3.0左右的则没有 config 目录,取而代之的是 vue.config.js
Vue 跨域原理:
浏览器是禁止跨域的,但是服务端不禁止,在本地运行 yarn serve 等命令时实际上是用 node 运行了一个服务器,因此 proxy 实际上是浏览器将请求发给自己的服务端,再由自己的服务端转发给要跨域的服务端,做了一层代理,因为不会出现跨域问题。
( vue-cli的proxyTable用的是http-proxy-middleware
中间件
create-react-app用的是webpack-dev-server内部也是用的http-proxy-middleware
http-proxy-middleware
内部用的http-proxy
)
vue.config.js的配置:
module.exports = {
devServer: {
open: true,
host: "localhost",
port: 8080,
https: false,
//以上的ip和端口是我们本机的;
下面为需要跨域的
proxy: {
//配置跨域
"/api": {
target: "https://p.3.cn/prices/mgets?skuIds=J_100008348542&type=1", //这里应该填写你们真实的后台接口
ws: true,
changOrigin: true, //允许跨域
pathRewrite: {
"^/api": "", //请求的时候使用这个api就可以
},
},
},
},
};
在组件里用 axios 发起请求:
sendCOReq() {
this.$axios.get("/api").then(res => {
console.log(res);
});
}
文章图片
获取到的数据 6.16更新
vue.config.js 里的
pathRewrite
作用是什么?用代理得有一个标识,告诉node你这个请求要用代理。 不然, 你的 html, css, js这些静态资源请求都会走代理,这显然是不对的。
proxy: {
//配置跨域
"/useclient": {
target: "https://p.3.cn/prices/mgets", //这里后台的地址模拟的;
应该填写你们真实的后台接口
ws: true,
changOrigin: true, //允许跨域
pathRewrite: {
"^/useclient": "", //请求的时候使用这个useclient就可以
},
},
"/useclient2": {
target: "https://p.3.cn/prices/mgets", //这里后台的地址模拟的;
应该填写你们真实的后台接口
ws: true,
changOrigin: true, //允许跨域
pathRewrite: {
"^/useclient2": "", //请求的时候使用这个useclient2就可以
},
},
},sendCOReq() {
this.$axios.get("/useclient?skuIds=J_100008348542&type=1").then(res => {
console.log(res);
});
}
"/useclient":
这个就是上文所说的标识,接口只要是'/useclient'开头的才用代理,所以你的接口就要这么写 /useclient/xx/xx。 最后代理的请求路径就是 http://xxx.xx.com/useclient/xx/xx
pathRewrite: {"^/useclient": "", }
然而正确的接口路径里面是没有/useclient的,所以就用到
pathRewrite
,用''^/useclient'':'', 把最终请求路径中'/useclient'去掉,这样既能有正确标识,又能在请求接口的时候去掉【2020-05-22|2020-05-22 Vue跨域请求怎么做(vue-cli 3.0)】这个标识还可以复数配置(比如我配置多了一个/useclient2)
参考:云端的幻影 vue跨域实现与原理(proxyTable)
小白开发MOOC Vue开发--vue3.0 vue.config.js 配置跨域
sf node中跨域代理 proxyTable的原理是什么?
推荐阅读
- vue-cli|vue-cli 3.x vue.config.js 配置
- 2020-04-07vue中Axios的封装和API接口的管理
- VueX--VUE核心插件
- vue组件中为何data必须是一个函数()
- 用npm发布一个包的教程并编写一个vue的插件发布
- vuex|vuex 基础结构
- Vue源码分析—响应式原理(二)
- VueX(Vuex|VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
- vue中的条件判断详解v-if|vue中的条件判断详解v-if v-else v-else-if v-show
- 如何在手机上查看测试vue-cli构建的项目