首页 > 语言 > JavaScript > 正文

详解vue-cli项目开发/生产环境代理实现跨域请求

2024-05-06 15:36:43
字体:
来源:转载
供稿:网友

开发环境中跨域

使用vue-cli创建的项目,开发地址是localhost:8080,需要访问非本机上的接口http://192.168.0.112:8080/cms/queryMaterial。不同域名之间的访问,需要跨域才能正确请求。跨域的方法很多,通常都需要后台配置,不过vue-cli创建的项目,可以直接利用node.js代理服务器,通过修改vue proxyTable接口实现跨域请求。在vue-cli项目中的config文件夹下的index.js配置文件中,修改前的dev:

dev: {  assetsSubDirectory: 'static', //静态资源根目录的子目录static,也就是dist目录下面的static  assetsPublicPath: '/', //编译发布的根目录,可配置为资源服务器域名或 CDN 域名  proxyTable: {}, //proxyTable 代理的接口(可跨域)  host: 'localhost',   port: 8080, //dev-server的端口号,可以自行更改  autoOpenBrowser: false, //是否自动打开浏览器  errorOverlay: true,  notifyOnErrors: true,  poll: false,   useEslint: true,  showEslintErrorsInOverlay: false,  devtool: 'cheap-module-eval-source-map',  cacheBusting: true,  cssSourceMap: true //默认情况下,关闭 CSS Sourcemaps,因为使用相对路径会报错 },  

只要修改里面的proxyTable: {}

proxyTable: { '/cms': { //代理地址  target: 'http://192.168.0.112:8080', //需要代理的地址  changeOrigin: true, //是否跨域  secure: false,  pathRewrite: {   '^/cms': '/cms' //本身的接口地址没有'/cms' 这种通用前缀,所以要rewrite,如果本身有则去掉(/cms等价于 www.xxx.com/cms)  } }},

然后重启项目npm run dev,请求数据时URL前加上“/cms”就可以跨域请求了

this.$axios.get('/cms/queryMaterial', {params: params})   .then((res) => {   console.log(res); }).catch((err) => {   console.log(err); })

访问接口若没有安装axios,则需要进行安装

1)安装:npm install axios --save-dev

2)main.js中导入
 import axios from 'axios'; //引入axios进行地址访问
 Vue.prototype.$axios = axios;(注意:不使用use来使用该例,而是用prototype原型来使用)

1、参数proxyTable详解:

vue-cli的config文件里的参数:proxyTable,这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化,例如我们要请求的地址是www.xxx.com/list/1,可以按照如下设置:

proxyTable: { '/list': {  target: 'http://www.xxx.com',  pathRewrite: {   '^/list': '/list'  } }}

这样我们在写url的时候,只用写成/list/1就可以代表www.xxx.com/list/1

那么又是如何解决跨域问题的呢?其实在上面的'list'的参数里有一个changeOrigin参数,接收一个布尔值,如果设置为true,那么本地会虚拟一个服务端接收你的请求并代你发送该请求,这样就不会有跨域问题了,当然这只适用于开发环境。增加的代码如下所示:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选