axios封装(通用)

axios封装

封装目的:
避免重复设置超时时间,请求头,错误处理;提高代码质量
主要文件目录:
在这里插入图片描述
post/index.js

/*
 * @Descripttion: axios 封装
 * @version: 1.0.0
 * @Author: hanjg
 * @Date: 2020-07-24 10:23:06
 * @LastEditors: hanjg
 * @LastEditTime: 2020-07-27 17:04:07
 */
import axios from 'axios'
import qs from 'qs'
import { Message } from 'element-ui'
import router from '../router/index'

var flag = true
const severHost = localStorage.getItem('severHost') // 请求ip
const severPort = localStorage.getItem('severPort') // 请求端口
const uploadFile = localStorage.getItem('upFile') // 文件地址

/**
 * 获取请求头
 * @param {String} type 接口参数类型 file:文件类型,参数不需要通过qs转化/inner:普通类型,参数需要转换
 * @returns {Object} header
 */
function getHead (type) {
  let header
  switch (type) {
    case 'inner':
      header = { // 请求体中的数据会以普通表单形式(键值对)发送到后端
        'Content-Type': 'application/x-www-form-urlencoded'
      }
      break
    case 'fileServer': // 上传到文件服务器
    case 'webServer': // 上传到web服务器
      header = {
        'Content-Type': 'multipart/form-data'
      }
      break
    case 'jsonString': // 将参数序列化json字符串进行传递
      header = {
        'Content-Type': 'application/json'
      }
      break
    default:
      header = { // 请求体中的数据会以普通表单形式(键值对)发送到后端
        'Content-Type': 'application/x-www-form-urlencoded'
      }
  }
  return header
}
/**
 * 封装请求接口方法
 * @param {String} type 接口参数类型 fileServer/webServer:文件类型,参数不需要通过qs转化/inner:普通类型,参数需要转换
 * @param {String} url 接口地址
 * @param {Object} data 请求参数
 * @returns {Promise}
 */
function post (type, url, data) {
  // console.log('http sever data:', data)
  const head = getHead(type)
  let axiosUrl = 'http://' + severHost + ':' + severPort + url // 普通数据发送地址
  console.log(axiosUrl)
  axios.defaults.withCredentials = true // 是否需要发送cookie
  if (type === 'inner') data = qs.stringify(data)
  if (type === 'fileServer') {
    axios.defaults.withCredentials = false
    axiosUrl = uploadFile + url // 文件上传地址
  }
  // console.log('axiosUrl:' + axiosUrl)
  return new Promise((resolve, reject) => {
    axios.post(axiosUrl, data, { headers: head }).then(res => {
      console.log('res:', res.data)
      if (res.data.code !== 200 && res.data.code !== 0) { // 异常回调()
        Message({
          message: res.data.msg,
          type: 'error',
          duration: 1000
        })
        reject(res)
      }
      if (res.data.code === 200 || res.data.code === 0) { // 正常解析
        flag = true
        console.log('success:', res)
        resolve(res)
      }
      if (flag) {
        if (res.code === 202) { // 导航守卫, 判断是否登陆
          if (router.history.current.name !== '/') {
            flag = false
            Message({
              message: '您尚未登录,即将跳转到登录页面!',
              type: 'error',
              duration: 1000
            })
            setTimeout(() => {
              router.push('/')
            }, 2000)
          }
        }
      }
    }).catch(e => {
      reject(e)
    })
  })
}
export default post

request/index.js

/*
 * @Descripttion: 项目所有请求接口合并于此
 * @version: 1.0.0
 * @Author: hanjg
 * @Date: 2020-07-24 15:30:24
 * @LastEditors: hanjg
 * @LastEditTime: 2020-07-27 19:31:28
 */
import post from '../post/index'
/**
 * 登录
 * @param {String} userName 用户名
 * @param {String} password 密码
 * @returns {Promise}
 */
function loginRequest (userName, password) {
  const params = {
    userName,
    password
  }
  return post('inner','地址', params)
}

/**
 * 获取用户信息
 * @returns {Promise}
 */
function getUserInfoRequest () {
  return post('inner', '地址')
}
/**
 * @returns {Promise}
 */
function getProjectListRequest () {
  const params = { pagNum: 1, pageSize: 300 }
  return post('inner', '/matrix-web/project/list', params)
}
/**
 * 离线重启
 * @returns {Promise}
 */
function termOffRestart (ip) {
  const params = { ip: ip }
  return post('inner', '/matrix-web/module/reboot', params)
}
/**
 * 获取监控列表
 * @param {Object} params 对象里的参数不固定
 * @returns {Promise}
 */
function getMonitorListRequest (params) {
  return post('inner', '地址', params)
}

/**
 * @returns {Promise}
 */
function getAppWhiteListtRequest () {
  const params = { pageNum: 1, pageSize: 300 }
  return post('inner', '地址', params)
}

/**
 * 获取公用模块列表
 * @param boxId 盒子id
 * @returns {Promise}
 */
function getCommonRobotListRequest (boxId) {
  const params = { boxId: boxId }
  return post('inner', '地址', params)
}
。。。等等方法
export default {
  loginRequest,
  getUserInfoRequest,
  getProjectListRequest,
  getMonitorListRequest,
  termOffRestart,
  getAppWhiteListtRequest,
  getBoxListtRequest,
  getCommonRobotListRequest
}

man.js引入
在这里插入图片描述
使用样例:

this.$request.termOffRestart (item.ip).then(res => { // 正常解析
            if (res.data.code === 200) {
              this.$message({
                type: 'success',
                message: res.data.msg,
                duration: 1000
              })
            }
          }).catch(e => { // 异常解析
            console.log('e:', e)
          })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值