使用axios解决跨域、显示mooc数据(正确版)
2020-02-26 本文已影响0人
edisonTechBlog
天杀的 vue cli 4 。一晚上就弄这个了~~~~。之前的错误版该说的都说了,这次直接贴正确代码。不过有几点要先说。
1.首先,不懂的一定要先看vue.config.js配置的官网:https://cli.vuejs.org/zh/config/#devserver-proxy
2.之前在vue cli 2中,显示mooc和打印mooc都是在vue组件中写的,但是现在是直接在这个配置文件中写。
3.还有一些话写在了代码里
vue只看关键部分
methods:{
getHomeInfo(){
//首先 访问8080, axios去请求这么一个路径
//接下来,这个路径会到 vue.config.js中
axios.get("/api/index.json").then(this.getHomeInfoSucc)
},
getHomeInfoSucc(res){
//这里可以在控制台中打印
console.log(res)
}
},
mounted(){
this.getHomeInfo()
}
接下来是重头戏:vue.config.js
const path = require('path');
const mockdata=require("./mock/index.json")
function resolve(dir) {
return path.join(__dirname, dir);
}
module.exports = {
lintOnSave: true,
chainWebpack: (config) => {
config.resolve.alias
.set('styles',resolve('src/assets/styles'))
// 这里只写了两个个,你可以自己再加,按这种格式.set('', resolve(''))
},
devServer:{
//当Home.vue中的路径过来时,/api/index.json 因为是api开头,
//所以这个路径被跨域到 http://localhost:8080/mock/index.json
//即实际上访问8080时,访问的是http://localhost:8080/mock/index.json
//这样就拿到了mooc的数据。
//拿到之后,就回到vue开始执行then。
//到此结束!!!!
proxy: {
'/api': {
target: 'http://localhost:8080',
pathRewrite:{
'^/api':'/mock'
}
},
'/foo': {
target: 'http://localhost:8080'
}
},
//用来显示假数据,即如果直接访问 http://localhost:8080/api/index.json
//就会在页面打印mock数据
port:8080,
before(app){
app.get('/api/index.json',(req,res,next)=>{
res.json(mockdata)
})
}
}
};