vue.js使用http-proxy-middleware解决跨域请求问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js使用http-proxy-middleware解决跨域请求问题相关的知识,希望对你有一定的参考价值。

参考技术A 最近在使用vue-cli搭建项目的过程中,遇到了跨域请求数据的问题,这里贴出我的解决方法,希望对大家有所帮助。

什么是跨域请求:

如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。

这里,数据请求用的是vue-resource(目前vue官方是推荐使用axios),安装插件:

npm install--save-devvue-resource

1

在main.js中引入插件:

importVueResourcefrom'vue-resource'

Vue.use(VueResource)

这里,解决跨域使用的是http-proxy-middleware来进行接口代理,安装方法同上:

npm install--save-devhttp-proxy-middleware

下面开始谈正事,举个栗子:

本地项目地址是:localhost:8080,现在我们要访问  http://m.maizuo.com/v4/api/film/comming-soon  和  http://m.maizuo.com/v4/api/billboard/home  这两个线上地址:

首先,设置build/dev-server.js:

varproxyMiddleware =require('http-proxy-middleware')

varserver = express()

server.middleware = [        proxyMiddleware(['/film/coming-soon'], target:'http://m.maizuo.com/v4/api', changeOrigin:true),        proxyMiddleware(['/billboard/home'], target:'http://m.maizuo.com/v4/api', changeOrigin:true)];

server.use(server.middleware);

注意,当要访问多个线上地址时,公共的地址部分写在target属性值里面,比如这里的  http://m.maizuo.com/v4/api  ,然后[ ]里边写地址的不同部分。

然后,修改config/index.js :

dev:env:require('./dev.env'),    port:8080,    proxyTable: '/api':         target:'http://m.maizuo.com/v4/api',        changeOrigin: true,        pathRewrite: '^/api':''           

这里的target同上面的一样,然后’/api’和’^/api’代表的就是这个根目录地址;

然后,在页面中具体的调用为:

this.$http.get('api/billboard/home').then((response) =>

);

这里,url的值为api + [ ] 中的部分 ;

然后,我们就解决了vue中的跨域问题 ;

这里,贴一下http-proxy-middleware插件的github地址,看更多用法 :

https://github.com/chimurai/http-proxy-mid

以上是关于vue.js使用http-proxy-middleware解决跨域请求问题的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 和 Vue.js,为啥 Refresh 让 vue.js 的 store 清晰?我如何在 vue.js 中使用上传的图片?

vue.min.js 独立版本中,第三方js 通过vm使用vue内定义的数据

vue.js webpack 问题:无法使用 configureWebpack 向 vue.config.js 添加插件

如何在 Vue.js 3 中使用 Vue 3 Meta?

Vue.js实战:初识Vue.js

如何在 Nuxt.js (Vue.js) 中使用 vue-infinite-loading