@enjoyor/http-axiosdeprecated

axios 封装

Usage no npm install needed!

<script type="module">
  import enjoyorHttpAxios from 'https://cdn.skypack.dev/@enjoyor/http-axios';
</script>

README

说明

这是一个在 vue 环境下使用的工具包,具体包括自定义异常和 Axios 封装,引入到项目:

yarn add @enjoyor/http-axios

项目导出了两个变量(VueError, EnloopError),两个方法(createRequest, createDefaultRequest),变量用于自定义异常然后全局处理,函数用于构建Http对象,区别如下:

名称|作用| -|-| VueError|用于vue全局引入| EnloopError|用于在非.vue文件中使用| createRequest|用于不满足公司接口规范的项目| createDefaultRequest|用于满足公司接口规范项目|

[toc]

1. API

VueError/EnloopError

参数|参数名称|作用|默认值| -|-|-|-| code|异常编码|在全局异常处理中按需处理|SE_0000| message|异常信息|可用于弹出提示信息、或者记录日志|不能为空| extra|附加信息|用于弥补参数信息不足情况|{}|

createRequest

参数|参数名称|作用|说明| -|-|-|-| baseUrl|项目根路径||默认值为 ''| onStart|请求发起前|可以用于批量在请求中添加 token 信息|支持promise| onFinish|请求返回时|正常,可以获取返回值;异常时,可以获取错误信息|支持promise| onError|请求异常|获取异常信息|支持promise,必须有返回值,建议返回 EnloopError| onQueueEmpty|请求队列为空时|可用于弹出提示信息、或者记录日志|支持promise| responseHandler|返回值处理|处理返回值,过滤不必要信息|返回值必须是promise|

createDefaultRequest

在 createRequest 的基础上,覆写了onFinish、onError、responseHandler三个方法,onStart、onQueueEmpty 可以用于请求时页面过渡效果。

Http 内置函数

createRequest/createDefaultRequest 会返回一个Http对象,该对象一共有 9 个方法,两个变量,作用如下:

名称|用途|说明| -|-|-| options|发送 options 请求|受限于根路径| upload|发送文件上传请求|受限于根路径| put|发送 put 请求|受限于根路径| del|发送 delete 请求|受限于根路径| get|发送 get 请求|受限于根路径| post|发送 post 请求|受限于根路径| request|发送任意请求|受限于 responseHandler| all|用于多个请求同步,底层就是 axios.all| axios|用于自定义任意请求| xhr|axios对象|变量| API_BASE_URL|根路径|变量|

如果需要修改 axios 参数比如:

axios.defaults.withCredentials = true
axios.defaults.timeout = 60000

可以使用 xhr 参数,Http.xhr 就是 axios,而 Http.axios 只能用于发送请求

2.QuickStart

2.1.自定义异常

VueError

// 导入
import { VueError } from '@enjoyor/http-axios'
Vue.use(VueError)

使用这种方式导入,会在 vue.js 的 prototype 上加一个 Error 属性,因此可以:

// vue 组件中使用
throw new this.Error({ code: 123, message: '异常' })
// 使用默认状态码 SE_0000
throw new this.Error({ message: '异常' })

使用全局异常处理可以使用 instanceof Vue.prototype.Error 判断:

import element from 'element-ui'
Vue.config.errorHandler = (info, vm, trace) => {
  // “自定义异常”处理,使用 Element-ui 提示
  if (info instanceof Vue.prototype.Error) {
    if (info.code === 'SE_0000') {
      element.Message({ type: 'error', message: info.message })
    } else if (info.code === 'SE_0001') {
      element.Message({ type: 'success', message: info.message })
    }
  }
  console.log(info)
}

注意: http模块有两个内置异常编码(SE 是 System Error的缩写)

  • SE_0000(默认状态码,系统异常,用于弹出提示信息等)
  • SE_0001(退出成功)

EnloopError

import { EnloopError } from '@enjoyor/http-axios'
throw new EnloopError({ code: 123, message: '异常' })

2.2.Http 模块

createDefaultRequest

1.编写一个 Http.js:

import { createDefaultRequest } from '@enjoyor/http-axios'
import store from '@/js/store/Index'

function onStart (config) {
  if (config.method === 'post') {
    config.data.token = store.getters['app/TOKEN']
  }
  store.dispatch({ type: 'app/setLoading', amount: true })
}
function onQueueEmpty () {
  store.dispatch({ type: 'app/setLoading', amount: false })
}

function http () {
  return createDefaultRequest({
    onStart: onStart,
    onQueueEmpty: onQueueEmpty,
    baseUrl: '/api-didesign/v1'
  })
}
export default http()

2.使用:

/*
 * @Author: lxt 测试相关接口
 * @Last Modified by: lxt
 * @Last Modified time: 2020-04-11 14:01:23
 * @Last Modified time: 2020-04-11 14:18:06
 */

import Http from '@/js/common/Http'
export default class TestApi {
  // 测试作业
  static test (params) {
    return Http.post('/test/fork', { params })
  }
}

createRequest

例子:

import { createRequest, EnloopError } from '@enjoyor/http-axios'
let SUCCESS_CODE = ['00000', 200]
function onStart (config) {
}
function onQueueEmpty () {
}
async function responseHandler (res) {
  return new Promise(function (resolve, reject) {
  })
}
function onError (err) {
  return {}
}
async function onFinish (res) {
}

function http (options) {
  return createRequest({
    onStart: onStart,
    onQueueEmpty: onQueueEmpty,
    onFinish: onFinish,
    responseHandler: responseHandler,
    onError: onError,
    baseUrl: '/api-didesign/v1'
  })
}
export default http()