解决VUE动态加载图片在跨域时无法显示的问题
写在前面小记,就简单写了 。问题:VUE开发时因为要访问后端的接口所以要配置请求转发,如果直接转发全部请求,那么VUE动态绑定的src也会转发到后端,因为图片在前端,所以会收到404 NOT FOUND的报错。常规的请求转发在vue-cli3内,直接编辑vue.config.js,如下:let proxyObj={};proxyObj['/']={ws:false,t...
写在前面
小记,就简单写了 。问题: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内定义的字段
<img :src="require(`@/assets/image/dianhan${position.duiduorob}.png`)" >
值得注意的是,需要用require(``)这样的方法,如果直接填写图片地址如:
<img :src="'../../assets/image/dianhan'+position.duiduorob+'.png'">
浏览器内会找不到该图片。原因:通常在编译运行后,图片会被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’,而其它请求也不会被转发到后端了。
更多推荐
所有评论(0)