1.1.7 • Published 2 years ago

request-decorate v1.1.7

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

目前内部使用,尚在完善中,请勿下载

进行如下配置后,基本等同 axios-expand 模块

import RequestDecorate, { plugins } from "request-decorate";
import axios from "axios";

// 使用 axios 处理请求
RequestDecorate.defaults.request = axios;
// 注册内置插件
RequestDecorate.plugins(plugins);

const RD = new RequestDecorate({
    apis: {
        login: {
            url: "/api/login",
            method: "POST"
        },
    }
});

RD.request({
    api: "login",
    requestType: "form",
    data: {
        username: "admin",
        password: "123456"
    }
});

可以的对axios $.ajax wx.request 等任意环境的请求方法进行装饰 使用配制式请求 统一请求参数格式 统一响应处理 统一错误拦截处理

import RequestDecorate from "request-decorate";
import axios from "request-decorate";
import $ from "juqery";

// 所有实例的默认参数
// apis - 接口配置列表 可以在实例参数中配置
RequestDecorate.defaults.apis = {
    userLogin: {
        url: "/api/login",
        method: "POST",
    },
};


// -- 不同的请求方式适配发送 JSON 数据 --

// 适配 axios
const RDAxios = new RequestDecorate({
    // apis, // 实例接口配置列表
    // 适配方法 必须返回 promise
    request(options) {
        return axios(options);
    },
});

// 适配 jQuery
const RDJquery = new RequestDecorate({
    request(options) {
        // 返回 promise
        return new Promise((resolve, reject) => {
            options.success = resolve;
            options.error = reject;
            $.ajax(options);
        });
    },
    // $.ajax JSON数据相关设置
    contentType: "application/json;charset=utf-8", // 任意参数都会合并到 options 中
    processData: false,
    // options 传入 request 方法前的处理
    before: [
        // $.ajax 用 type 设置请求方法,在此转换
        function (options) {
            options.type = options.method;
        },
        // 将 data 转换为 JSON 字符串
        function (options) {
            options.data = JSON.stringify(options.data);
        },
    ],
});

// 适配 fetch
const RDFetch = new RequestDecorate({
    request(options) {
        return fetch(options.url, options);
    },
    // 设置 plugin 可以同时注入 before middle after
    plugins: [
        {
            // fetch data 转换为 body
            before(options) {
                if (options.data) {
                    options.headers = {
                        "Content-Type": "application/json;charset=utf-8",
                    };
                    options.body = JSON.stringify(options.data);
                }
            },
            // fetch 404 等状态不会触发 catch。手动抛出异常
            middle(promise) {
                return promise.then((response) => {
                    if (response.status > 300) {
                        throw response;
                    }
                });
            },
        },
    ],
});

// -- 调用请求。通过上边的适配,可以使用统一格式 --

RDAxios.request({
    api: "userLogin", // apis 中对应的键名
    data: { username: "admin", password: "123456" },
});
// 参数简写方式 同上
RDJquery.request("userLogin", { username: "admin", password: "123456" });
RDFetch.request("userLogin", { username: "admin", password: "123456" });
1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.1.2

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago