响应拦截器、请求拦截器、接口的封装

文章详细介绍了如何在Vue项目中设置axios,包括设置请求头、创建axios实例、添加request和response拦截器来处理token和错误信息,以及如何封装和使用接口。此外,还提到了errorCode.js文件用于管理错误代码和对应的消息。
摘要由CSDN通过智能技术生成
  1. 首先在vue项目中新建一个utils文件
  2. 在utils文件下新建一个request.js文件和errorCode.js文件
  3. 以下是request.js文件中的代码
import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import errorCode from '@/utils/errorCode'

axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: '公共的URL',
  // 超时
  timeout: 5000
})

// request拦截器,每个接口请求的时候加token
service.interceptors.request.use(config => {
  let token = sessionStorage.getItem('token'); // 取你存放的token
  if(token){
    config.headers.common['token'] = token; // 中括号里请求头里的名字 Authorization一般这个名字是token常用的 在这里公司后端要token这个名字 不要轻易更改
  }
  return config
}, error => {
    console.log(error)
    Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
    // 未设置状态码则默认成功状态
    const code = res.data.code || 200;
    const status = res.status;
    // 获取错误信息
    const msg = errorCode[code] || res.data.msg || errorCode['default'] || res.error || res.data.res;
    //获取错误提示
    const ress = res.data.res;
    if (code === 601) {
      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }
      ).then(() => { 
        location.href = '/Login';
        localStorage.clear()
      })
    } else if (code === 500 || status ===500) {
      if(ress){
        Message({
          message: ress,
          type: 'error'
        })
      }else{
        Message({
          message: msg,
          type: 'error'
        })
      }
       
      return Promise.reject(new Error(msg))
    } else if (code !== 200 ) {
      if(ress){
        Notification.error({
          title: Notification.error({
          title: ress
        })
        })
      }else{
        Notification.error({
          title: msg
        })
      }
      
      return Promise.reject('error')
    } else {
      return res.data
    }
  },
  error => {
    console.log('err' + error)
    let { message } = error;
    if (message == "Network Error") {
      message = "后端接口连接异常";
    }
    else if (message.includes("timeout")) {
      message = "系统接口请求超时";
    }
    else if (message.includes("Request failed with status code")) {
      message = "系统接口" + message.substr(message.length - 3) + "异常";
    }
    Message({
      message: message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service


4.以下是errorCode.js文件中的代码

export default {
  '401': '认证失败,无法访问系统资源',
  '403': '当前操作没有权限',
  '404': '访问资源不存在',
  'default': '系统未知错误,请反馈给管理员',
  '601': 'token过期'
}

接下来就是接口的封装
api文件下新建一个后缀名.js的文件用于存放封装好的接口
在这个.js文件下把request.js引入


import request from '@/utils/request'

export function List(data) {
  return request({
    url: '接口名',
    method: 'post',// 请求方法
    // params: query
    data
  })
}

最后在页面引入

import{UploadtaskList} from '@/api/home'
methods: {
    getList() {
      UploadtaskList(this.queryParams).then((res) => {
        this.tableData = res.data
        console.log(res, '===================res')
      })
    },
   }

好了到这里就结束了,还有别的方法,欢迎私聊学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Best_北诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值