vue-cli3中配置axios及使用及解决跨域的问题

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’即可
				}
			}
    }
  }
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值