解决VUE动态加载图片在跨域时无法显示的问题

您所在的位置:网站首页 获取图片地址失败是什么原因呢 解决VUE动态加载图片在跨域时无法显示的问题

解决VUE动态加载图片在跨域时无法显示的问题

2024-07-03 03:44| 来源: 网络整理| 查看: 265

写在前面

小记,就简单写了 。问题:VUE开发时因为要访问后端的接口所以要配置请求转发,如果直接转发全部请求,那么VUE动态绑定的src也会转发到后端,因为图片在前端,所以会收到404 NOT FOUND的报错。

常规的请求转发

在vue-cli3内,直接编辑vue.config.js,如下:

let proxyObj={}; proxyObj['/']={ ws:false, target:'http://localhost:8023',//后端地址 changeOrigin:true, pathRewrite:{ '^/':'' } }; module.exports={ devServer:{ host:'localhost', port:8080, proxy:proxyObj } };

代码很简单,就不解释了,这段代码就是把所有请求都转发到了后端。

常规的src动态绑定

如下:

// position.duiduorob为data内定义的字段

值得注意的是,需要用require(``)这样的方法,如果直接填写图片地址如:

浏览器内会找不到该图片。原因:通常在编译运行后,图片会被webpack统一打包到localhost:8080/static/img/[文件名].png,因为是上述过程动态加载的,所以url-loader无法解析图片地址,所以导致上述方法中的图片无法在浏览器内显示。解决方法就是通过require(``)这样的方法将图片作为模块被加载。

跨域请求转发时找不到图片

前面也说了,就是因为转发了全部请求,所以上述require(``)过后,浏览器去后端找图片了,导致找不到。 解决思路:只转发要访问后端接口的请求,其它不变。 所以其实就是过滤一下,添加一个条件。如下:要访问后端的请求在url上加一个/api即可

let proxyObj={}; proxyObj['/api']={ //url前部加上'/api' ws:false, target:'http://localhost:8023',//后端地址 changeOrigin:true, pathRewrite:{ '^/api':'' //到了后端去掉/api } }; module.exports={ devServer:{ host:'localhost', port:8080, proxy:proxyObj } };

所以在其他部分全部不变的情况下,只需在你封装的http请求方法内给url参数前加一个’/api’前缀,如下:

export const getRequst=(url,params)=>{ return axios({ method:'get', url:'/api'+ url,//原来为 url:url, data:params, }) };

这下访问后端的请求全部在url上套上了’/api’,而其它请求也不会被转发到后端了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3