vue项目中封装axios请求以及token处理

localStorage.js

//项目当中的有请求的地方基本都会用到token,所以我们需要来封装好添加获取和删除的localStorage方法,然后按需引入,单独创建一个utils的文件夹,在里面创建localStorage.js
//存储
function setLocalStorage (key, value) {
  window.localStorage.setItem(key, JSON.stringify(value))
}
//获取
function getLocalStorage (key) {
  let value = window.localStorage.getItem(key)
  try {
    value = value === 'undefined' ? null : JSON.parse(value)
  } catch (error) {
    value = null
  }
  return value
}
//移除
function removeLocalStorage (key) {
  window.localStorage.removeItem(key)
}
export {
  setLocalStorage,
  getLocalStorage,
  removeLocalStorage
}

封装请求

import axios from 'axios'
import router from '@/router'
import vue from 'vue'
import { getLocalStorage } from './localStorage.js'  //引入localStorage
const service = axios.create({
  // process.env.NODE_ENV === 'development' 来判断是否开发环境
  timeout: 5000, //设置时间超时,单位毫秒
  withCredentials: true  //当配置了 withCredentials = true时,必须在后端增加 response 头信息Access-Control-Allow-Origin,且必须指定域名,而不能指定为*!!!
})
service.defaults.retry = 4;
service.defaults.retryDelay = 1000;
service.interceptors.request.use(
  config => {
    const userInfo = getLocalStorage('userInfo') //获取用户信息
    let token = ''
    let id = ''
    if (userInfo) {
      token = userInfo.token
      id = userInfo.id
    }

    if (token) {
      config.headers.common = {
        JSESSIONID: token,
        user_id: id
      }
    }
    return config
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

service.interceptors.response.use(
  response => {
    const { data } = response
    const { success, code, message } = data
    if (!success && Number(code) === 401) {
      window.localStorage.setItem('userInfo', '')
      router.push({
        path: '/login',
        query: {
          backUrl: location.href.split('#')[1]
        }
      })
      vue.$VAlert.danger(message)
    }
    if (response.status === 200) {
      return response.data
    } else {
      const error = new Error('接口异常')
      return Promise.reject(error)
    }
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

export default service

单独的接口api文件方便以后修改更换
在src下创建一个api文件夹=> index.js

import request from '../utils/request'  //引入封装好的axios
//git
export const goods= query => {
        return request({
            url: '后台接口',
            method: 'get',
            params: query
        })
    }
        //post
export const goodsList = data => {
        return request({
            url: '后台接口',
            method: 'post',
            data: data
        })
    }

最后当然就是引用以及使用了

import { goods} from '../api/index'


async goodsGet() {

	//参数想写在哪里都可以,只要能穿过来就好
	let parms = {
		//参数
	}
      const res = await goods(params)
      const { data, success, message } = res
      if (success) {
       		//成功
       		console.log(data)
      } else {
       		//失败
      }
    },
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值