15. 基于Vue+Element+nodeJs+Express+MySql后台管理系统-axios请求封装以及接口统一管理

22 篇文章 9 订阅
12 篇文章 1 订阅

在src目录下创建config目录,并在此目录下创建两个文件http.js和interface.js,
其中http.js用来对axios请求进行封装,interface.js用来对此项目中用到的接口进行统一封装。

一、axios请求封装http.js

1. axios 全局配置:

import axios from 'axios'
import store from '../store'
import router from '../router'
import common from '../assets/js/common.js'

axios.defaults.timeout = 180000
axios.defaults.baseURL = '/demo-weekly/back-end/api' // 测试接口域名
export const baseURL = axios.defaults.baseURL

2. 拦截器:

应用场景:

1:每个请求都带上的参数,比如token,时间戳等。
2:对返回的状态进行判断,比如token是否过期

请求:
axios.interceptors.request.use((config) => {
  if (config.method == 'post') {
    config.headers['Content-Type'] = 'application/json'
    config.headers['token'] = store.state.userInfo.token
    config.data = JSON.stringify(config.data)
    return config
  }
}, (error) => {
  let str = error
  return common.toast(str, 'error', false)
})
响应:
axios.interceptors.response.use(response => {
  let code = response.data.code
  if (code && typeof (code) !== 'undefined') {
    if (code == 20) {
      router.replace({
        path: '/'
      })
    } else if (code !== -2 && code !== 1) {
      common.toast(response.data.message, 'error', false)
    }
  }
  return response
}, err => {
  if (err && err.response) {
    switch (err.response.status) {
      case 400:
        err.message = '错误请求'
        common.toast(err.message, 'error', false)
        break
      case 403:
        err.message = '拒绝访问'
        common.toast(err.message, 'error', false)
        break
      case 404:
        err.message = '请求错误,未找到该资源'
        common.toast(err.message, 'error', false)
        break
      case 405:
        err.message = '请求方法未允许'
        common.toast(err.message, 'error', false)
        break
      case 408:
        err.message = '请求超时'
        common.toast(err.message, 'error', false)
        break
      case 502:
        err.message = '网络错误'
        common.toast(err.message, 'error', false)
        break
      case 504:
        err.message = '网络超时'
        common.toast(err.message, 'error', false)
        break
      default:
        err.message = '连接错误'
        common.toast(err.message, 'error', false)
    }
  } else {
    err.message = '连接到服务器失败'
    common.toast(err.message, 'error', false)
  }
  return Promise.resolve(err.response)
})

3. 将axios实例暴露出去

export function http (url, params, responseType) {
  return new Promise((resolve, reject) => {
    let userId = store.state.userInfo.id
    if (userId && userId > 0) {
      params.userId = parseInt(userId)
    } else {
      params.userId = 0
    }

    if (!responseType || typeof (responseType) == 'undefined') {
      // 普通post请求
      axios.post(url, params)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
    } else {
      // 导出下载文件
      axios.post(url, params, {
        responseType: responseType
      })
      .then(response => {
        resolve(response)
      }, err => {
        reject(err)
      })
    }
  })
}

二、接口统一管理interface.js

// 接口配置
export const userLogin = '/user/login' // 用户登录
export const userLogout = '/user/logout' // 用户登出
export const userAdd = '/user/add' // 新增用户
export const userUpdateInfo = '/user/updateInfo' // 更新用户信息
export const userUpdateState = '/user/updateState' // 更新用户状态
export const userDetail = '/user/detail' // 获取用户详情
export const userList = '/user/list' // 获取用户列表

export const weeklyAdd = '/weekly/add' // 新增周报
export const weeklyUpdateInfo = '/weekly/updateInfo' // 更新周报信息
export const weeklyUpdateState = '/weekly/updateState' // 更新周报状态
export const weeklyDetail = '/weekly/detail' // 获取周报详情
export const weeklyList = '/weekly/list' // 获取周报列表

三、项目链接

周报管理系统git仓库链接:nodeJs工作周报后台管理系统OA模板

程序员接单_竹立荷塘的博客-CSDN博客

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值