1.2.3 • Published 4 months ago

@chaoswise/request v1.2.3

Weekly downloads
29
License
MIT
Repository
-
Last release
4 months ago

公共请求库

Features

  • 统一公共请求,作为单独的包运行,相当于axios的再次封装
  • 支持mock数据
  • 多次重复请求,保留最后一次请求(可通过cancelRepeat配置关闭)
  • 封装cancel方法

API

// 全部api引用方法
import {
  initRequest,
  mockInstance,
  axiosInstance,
  clearPending,
  pending,
  fetchGet,
  fetchPut,
  fetchDelete,
  fetchPost,
  upload, 
  downloadFile, 
  formateResponse
} from '@chaoswise/request';

1. initRequest

2. mockInstance

3. axiosInstance

4. clearPending

5. pending

6. fetchGet

7. fetchPut

8. fetchDelete

9. fetchPost

10. upload

11. downloadFile

12. formateResponse


initRequest

初始化配置并创建请求实例axiosInstance

initRequest({
  config: {
    // 请求错误码回调
    statusCallback: {
      '401': () => {
      },
      '403': () => {
      }
    },
    // 是否启用mock数据 false 关闭 true 开启
    useMock: true,
    // mock延迟mm
    delayResponse: 500,
    // 统一处理请求
    handleResponse: (res, error) => {
      if (error) {
        // 错误处理
      } else {
        // 响应处理
      }
    },
    // 是否开启登陆验证 false 关闭 true 开启(统一处理401登出逻辑)
    checkLogin: false,
    // restapi: sso登出校验地址
    restapi: '', // 默认为 error.response.config.url 设置后以设置为准
  },
  // 请求头的配置文件
  defaults: {
    // 请求的基础域名
    baseURL: "",
  },
  // mock模拟请求接口数组, 依赖axios-mock-adapter,约定生成相关mock接口,也可通过mockInstance参考官方api实现mock数据
  mock: [{
    method: 'onGet',
    url: 'mockurl',
    res: {
      code: 100000,
      data: {}
    }
  }]
});

mockInstance

mock数据实例,参考axios-mock-adapter

// 模拟分页接口demo
import { mockInstance } from '@chaoswise/request';
import { demoListData } from './demoListConfig';

mockInstance.onGet("/get/basictablelist").reply((config) => {
  let filterData = demoListData;
  let resultData = [];
  let totalNum = 0;
  let currentPage = config.params.currentPage;
  let pageSize = config.params.pageSize;

  totalNum = filterData.length;
  resultData = filterData.slice((currentPage - 1) * pageSize, currentPage * pageSize);

  return [200, {
    data: resultData,
    total: totalNum
  }];
});

axiosInstance

axios实例,参考axios

// Add a request interceptor
axiosInstance.interceptors.request.use(function (config) {
  // Do something before request is sent
  // 统一增加国际化标识
  config.headers.language = langUtil.getLang().language;
  const isDev = process.env.NODE_ENV === 'development';
  if (window.DOSM_CONFIG.isIgnoreGetway && isDev) {
    config.headers = {
      ...config.headers,
      accountId: '110',
      userId: '2',
      topAccountId: '110',
    };
  }
  return config;
}, function (error) {
  // Do something with request error
  return Promise.reject(error);
});

clearPending

中断所有请求

import { clearPending,  fetchPost } from '@chaoswise/request';

// 取消全部已发出请求(例如:页面销毁) clearPending()

// 指定已请求方法取消 const method1 = fetchPost('/get/list') method1.cancel();

## pending
> 全部请求根据请求url存储到一个map中,里面包含cancel方法(此方法使用场景不多,大部分场景可以通过[clearPending](#clearpending)下的场景实现)
```js
import { pending } from '@chaoswise/request';
// 中断某一请求
const cancel = pending.get('/demo/api/v1');
cancel('/demo/api/v1');
pending.delete('/demo/api/v1')

fetchGet

get请求

import { fetchGet } from '@chaoswise/request';

fetchGet('/get/basictablelist', { params: { name: '张三' } }).then(res => { // 成功 }).catch(err => { // 失败 })

## fetchPut
> put请求
```js
import { fetchPut } from '@chaoswise/request';

fetchPut('/get/basictablelist', {
  data: {
    name: '张三'
  }
}).then(res => {
  // 成功
}).catch(err => {
  // 失败
})

fetchDelete

put请求

import { fetchDelete } from '@chaoswise/request';

fetchDelete('/get/basictablelist', { data: { name: '张三' } }).then(res => { // 成功 }).catch(err => { // 失败 })

## fetchPost
> put请求
```js
import { fetchPost } from '@chaoswise/request';

fetchPost('/get/basictablelist', {
  data: {
    name: '张三'
  }
}).then(res => {
  // 成功
}).catch(err => {
  // 失败
})

upload

文件上传

import { upload } from '@chaoswise/request';

upload ( 'http:xxx', // 请求url {}, // 请求参数 () => {}, // 上传进度回调 {} // 其它请求实例可能要透传的参数 ).then(res => { // 成功 }).catch(err => { // 失败 })

## downloadFile
> 文件下载,默认下载excel
```js
import { downloadFile } from '@chaoswise/request';

downloadFile(
  content, // 内容
  filename, // 文件名称
  {
    type: '下载文件类型'
  }, // 参数
)

formateResponse

  • 后端接口返回数据格式化,
  • 参数response是请求返回值,
  • 将返回值error_code转code,error_msg转msg,
  • 最终返回{code:10000,status:'success',data:null,msg:'**'}
import { formateResponse } from '@chaoswise/request';

const res = formateResponse({ error_code:000000, error_msg:"success", data:{} })

console.log(res); /* res = { code:100000, msg:"success", status:"success", data:{} }

### mock方法
#### 1. 约定式
> 在初始化实例进行配置
```js
// 
initRequest({
  mock: [[
    {
      "method": "onGet",
      "url": "/get/list",
      "res": {
          "code": 100000,
          "data": 141314
      }
    },
    {
      "method": "onGet",
      "url": "/get/auth",
      "res": {
          "status": "success",
          "msg": null,
          "code": 100000,
          "data": [
              {
                  "code": "1011000101",
                  "selected": true
              },
              {
                  "code": "11",
                  "selected": true
              }
          ]
      }
    }
  ]]
})

使用mock实例进行注册(具体参考axios-mock-adapter

import { mockInstance } from '@chaoswise/request';

mockInstance.onGet("/get/allUser").reply(200, { data: "get 获取的全部用户 user1, user2, user3" });

mockInstance.onPost("/get/allUser").reply(200, { data: "post 获取的全部用户 user1, user2, user3" });

mockInstance.onGet("/get/user", { params: { id: 'user1' } }).reply(200, { data: "get 获取的到的用户为: user1" });

mockInstance.onPost("/get/user", { id: 'user1' }).reply(200, { data: "post 获取的到的用户为: user1" });

1.2.3

4 months ago

1.2.2

4 months ago

1.2.1

4 months ago

1.2.0

5 months ago

1.1.1

1 year ago

1.1.0

1 year ago

1.1.2

12 months ago

1.0.2

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

0.0.32

1 year ago

0.0.33

1 year ago

0.0.30

2 years ago

0.0.31

2 years ago

0.0.26

2 years ago

0.0.27

2 years ago

0.0.28

2 years ago

0.0.29

2 years ago

0.0.25

2 years ago

0.0.24

3 years ago

0.0.23

3 years ago

0.0.22

3 years ago

0.0.20

3 years ago

0.0.21

3 years ago

0.0.19

3 years ago

0.0.18

3 years ago

0.0.17

3 years ago

0.0.16

3 years ago

0.0.15

3 years ago

0.0.14

3 years ago

0.0.13

3 years ago

0.0.12

3 years ago

0.0.11

3 years ago

0.0.10

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

4 years ago

0.0.1

4 years ago

0.1.11

4 years ago