request-decorate
v1.1.7
Published
**目前内部使用,尚在完善中,请勿下载**
Downloads
1
Readme
目前内部使用,尚在完善中,请勿下载
进行如下配置后,基本等同 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" });