vue2.0 axios interceptors 拦截器

官方文档地址: https://github.com/axios/axios#axiosposturl-data-config

main.js 文件中配置

import axios from 'axios'

// 拦截request,设置全局请求为ajax请求
axios.interceptors.request.use((config) => {
  config.headers['X-Requested-With'] = 'XMLHttpRequest'

  return config
})

// 拦截响应response,并做一些错误处理
axios.interceptors.response.use((response) => {
  const data = response.data

// 根据返回的code值来做不同的处理(和后端约定)
  switch (data.code) {
    case '0':
      // 举例
      // exp: 修复iPhone 6+ 微信点击返回出现页面空白的问题
      if (isIOS()) {
        // 异步以保证数据已渲染到页面上
        setTimeout(() => {
          // 通过滚动强制浏览器进行页面重绘
          document.body.scrollTop += 1
        }, 0)
      }
      // 这一步保证数据返回,如果没有return则会走接下来的代码,不是未登录就是报错
      return data

    // 需要重新登录
    case 'SHIRO_E5001':
      // 微信生产环境下授权登录
      if (isWeChat() && IS_PRODUCTION) {
        axios.get(apis.common.wechat.authorizeUrl).then(({ result }) => {
          location.replace(global.decodeURIComponent(result))
        })
      } else {
        // 否则跳转到h5登录并带上跳转路由
        const search = encodeSearchParams({
          next: location.href,
        })

        location.replace(`/user/login?${search}`)
      }

      // 不显示提示消息
      data.description = ''
      break

    default:
  }
  // 若不是正确的返回code,且已经登录,就抛出错误
  const err = new Error(data.description)

  err.data = data
  err.response = response

  throw err
}, (err) => { // 这里是返回状态码不为200时候的错误处理
  if (err && err.response) {
    switch (err.response.status) {
      case 400:
        err.message = '请求错误'
        break

      case 401:
        err.message = '未授权,请登录'
        break

      case 403:
        err.message = '拒绝访问'
        break

      case 404:
        err.message = `请求地址出错: ${err.response.config.url}`
        break

      case 408:
        err.message = '请求超时'
        break

      case 500:
        err.message = '服务器内部错误'
        break

      case 501:
        err.message = '服务未实现'
        break

      case 502:
        err.message = '网关错误'
        break

      case 503:
        err.message = '服务不可用'
        break

      case 504:
        err.message = '网关超时'
        break

      case 505:
        err.message = 'HTTP版本不受支持'
        break

      default:
    }
  }

  return Promise.reject(err)
})

axios.install = (Vue) => {
  Vue.prototype.$axios = axios
}

export default axios

 

转载于:https://my.oschina.net/heyjuan/blog/1550695

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中配置Axios拦截器可以通过以下步骤实现: 1. 首先,在项目中引入Axios库和需要的其他依赖(例如Element UI)。 2. 创建一个Axios实例,可以命名为`instances`,并设置`baseURL`等配置项。 3. 在创建的Axios实例中,使用`interceptors`属性来配置响应拦截器。 4. 在响应拦截器中,可以通过`instances.interceptors.response.use()`方法来定义成功和失败的处理函数。 5. 在成功处理函数中,可以对接口调用成功后的响应进行处理,例如打印日志或进行其他操作。 6. 在失败处理函数中,可以对接口调用失败时的情况进行处理,例如打印错误信息或显示提示消息。 7. 最后,导出配置好的Axios实例,以便在项目其他地方使用。 以下是一个示例代码,演示了如何配置Vue中的Axios拦截器: ```javascript import axios from 'axios'; import { Message } from 'element-ui'; import router from '../router'; const instances = axios.create({ baseURL: 'http://localhost', }); instances.interceptors.response.use( success => { console.log('响应拦截器,成功'); // 在这里对成功的响应进行处理 }, error => { console.log('响应拦截器,失败', error); Message.error({ message: error }); // 在这里对失败的响应进行处理 } ); export default instances; ``` 请注意,上述代码是一个示例,你可以根据自己的需求进行修改和扩展。同时,还可以根据需要配置请求拦截器,以实现在所有请求中添加统一的内容,例如请求头等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值