起步

Axios可以用来异步发起Request请求来获取数据

CDN应用axios

<script src="<https://unpkg.com/axios/dist/axios.min.js>"></script>

# axios.get(地址?key=value&key2=values).then(function(response){},function(err){})
# 示例
search : function(){
    var that = this;
    axios.get("<https://autumnfish.cn/search?keywords=>" + this.keyword).then(function(response){
        console.log(response)
        that.music_arr = response.data.result.songs
    }, function(err){
        console.log(err)
    })
},

# axios.post(地址,{key:value,key2:value2}).then(function(response){},function(err){})
# 示例
Mpost : function(){
    axios.post("<https://autumnfish.cn/api/user/reg",{username:"222阿香3>"})
    .then(function(response){
        console.log(response);
    },function(err){
        console.log(err);
    })
},

组件化应用

npm 安装:**npm install** axios

箭头函数继承了父级的作用域,所以可以不用var that=this

Axios与Vue结合

// main.js
import axios from "axios"
axios.defaults.baseURL = "<http://localhost:8080>"  // 修改默认配置 请求根路径
Vue.prototype.$http = axios  // Axios绑定在Vue上面

// 在其他页面上使用Axios
this.$http.get("db/user").then((resp) =>{
  console.log(resp)
})

解决跨域问题直接在SpringBoot上面加@CrossOrigin

创建新的axios对象

通过创建对象,我们可以配置的axios更好用

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

拦截器

axios拦截器分为请求拦截器和响应拦截器

请求拦截器:在发出请求时经过的地方

// 请求拦截器
service.interceptors.request.use(
  // 请求拦截器 正常
  config => {
    // 在发送请求之前做些什么
    if (store.getters.token) {
      // 让每个请求携带token
      // ['X-Token'] 是一个自定义头部key
      // 根据实际情况修改
      config.headers['X-Token'] = getToken()
    }
    return config
  },
  // 请求拦截器 异常
  error => {
    // 处理请求错误
    console.log(error) // 调试用
    return Promise.reject(error)
  }

响应拦截器:请求回来的时候,经过的地方

// 响应拦截器
service.interceptors.response.use(
  // 响应拦截器 2xx正常
  response => {
    const res = response.data
    // 如果自定义code不是20000,则判断为错误
    if (res.code !== 20000) {
      Message({
        message: res.message || '错误',
        type: 'error',
        duration: 5 * 1000
      })
      // 50008: 非法的token;50012: 其他客户端登录;50014: token过期;
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        // 重新登录
        MessageBox.confirm('您已经注销,您可以取消以保留在此页面,或再次登录', '确认注销', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
      return Promise.reject(new Error(res.message || '错误'))
    } else {
      return res
    }
  },
  // 响应拦截器 异常
  error => {
    console.log('err' + error) // 调试用
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }