vue-cli3中配置axios及使用
1.vue 安装 npm install axios ,在main.js里面就可以使用axiso如下配置:
import axios from 'axios'
Vue.prototype.$axios = axios
axios.defaults.baseURL = 'http://10.81.36.96:8080';
2.vue页面,如下调用,不会出现跨域问题
methods: {
async getArtInfo()
{
await this.$axios({
method: "get",
url: "/frontapi/museumCollection/classify/list",
params:
{ pageNum:1,
pageSize:10,
status:0
},
data: {},
}).then((res) => {
let length = res.data.rows.length;
for(let i = 0; i < length; i++)
{
let obj = {};
obj.text = res.data.rows[i].categoryName;
obj.id = res.data.rows[i].categoryId;
obj.path = axios.defaults.baseURL+res.data.rows[i].params.reallyFilePath;
this.artImgs.push(obj);
}
});//获取藏品方法
}
},
created()
{
this.getArtInfo();
}
3.另外一种实现方法:创建了vue-cli3脚手架项目之后,需要自己新建一个vue.config.js文件,然后配置axios,就可以请求接口获取数据了。
3.1.vue.config.js:设置反向代理,解决跨域
devServer: {
proxy: {
'/api': {
target: 'http://10.1.2.119:8088/', // 后端地址
secure: false, // 如果是https接口,需要配置这个参数
ws: true, // 是否代理websockets
changeOrigin: true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite: {
'^/api': ''
}
}
}
}
代码分析:proxy里面的pathRewrite里面的’^/api’: ‘’ 什么意思?
答:用代理, 首先你得有一个标识, 告诉他你这个连接要用代理. 不然的话, 可能你的 html, css, js这些静态资源都跑去代理. 所以我们只要接口用代理, 静态文件用本地. ‘/api’: {}, 就是告诉node, 我接口只要是’/api’开头的才用代理.所以你的接口就要这么写 /api/xx. 最后代理的路径就是 http://192.168.1.24:8081/api/xx/。
可是不对啊, 我正确的接口路径里面没有/api啊. 所以就需要 pathRewrite,用’^/api’: ’ ‘, 把’/api’去掉, 这样既能有正确标识, 又能在请求接口的时候去掉api.
3.2.main.js:配置axios信息
import axios from 'axios'
Vue.prototype.$axios = axios
axios.defaults.baseURL = '/api';
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';//配置请求头信息。
axios.defaults.headers.common['accessToken'] = 'FA4C308D5E8F6409E01344ADDAEB4C71';
3.3.vue文件,使用axios请求数据:
this.$axios({
method: "post",
url: "/report/getReportFolders",
data: {},
}).then((res) => {
console.log(res);
});
vue.config.js文件完整代码:
module.exports = {
/* 部署生产环境和开发环境下的URL:可对当前环境进行区分,baseUrl 从 Vue CLI 3.3 起已弃用,要使用publicPath */
/* baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' */
publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
/* 输出文件目录:在npm run build时,生成文件的目录名称 */
outputDir: 'dist',
/* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
assetsDir: "assets",
/* 是否在构建生产包时生成 sourceMap 文件,false将提高构建速度 */
productionSourceMap: false,
/* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */
filenameHashing: false,
/* 代码保存时进行eslint检测 */
lintOnSave: true,
/* webpack-dev-server 相关配置 */
devServer: {
/* 自动打开浏览器 */
open: false,
/* 设置为0.0.0.0则所有的地址均能访问 */
host: '0.0.0.0',
port: 8081,
https: false,
hotOnly: false,
/* 使用代理 */
proxy: {
'/api': {
target: '', //后端地址
secure: false, // 如果是https接口,需要配置这个参数
ws: true,//是否代理websockets
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
},
}
vue-cli2解决跨域配置
dev: {
proxyTable: {
'/api': {
target: "http://10.1.2.119:8088",
changeOrigin: true,
pathRewrite: {
'^/api': ''// 这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://localhost:9073/test/findById',直接写‘/api/test/findById’即可
}
}
}
}