1 Star 2 Fork 1

APIJSON/APIJSON-Builder

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
request.js 2.20 KB
一键复制 编辑 原始数据 按行查看 历史
pengxg 提交于 2020-09-07 14:04 +08:00 . commit init
import axios from 'axios'
import {reverseMerge} from "./index";
export const config = {
baseURL: '/api',
tokenKey: 'X-Token',
token: 'apijson-builder'
}
export const setToken = function (token) {
config.token = token
}
const request = axios.create({
baseURL: config.baseURL
})
/**
* @param res
*/
function extractResponse(res = {}) {
let data = {};
// eslint-disable-next-line no-prototype-builtins
const multi = res.hasOwnProperty('[]');
if (multi) {
const formatEntities = function (data) {
data['[]'].forEach(item => {
Object.keys(item).forEach(table => {
// eslint-disable-next-line no-prototype-builtins
if (!data.hasOwnProperty(table)) {
data[table] = [];
}
data[table].push(item[table])
})
})
delete data['[]']
}
const isAssociatedResult = function (data) { // 认为, 当集合(key为'[]')中存在多个实体对象时,当作关联结果集处理.TODO 应当有更可靠的判断方式
const arr = data['[]']
if (arr.length > 0) {
return Object.keys(arr[0]).length > 1
}
return false;
}
if (!isAssociatedResult(res)) { // 非关联的响应结果, 则无需格式化(保证了关联关系)
reverseMerge(data, res)
formatEntities(data)
} else {
data = res;
}
} else {
data = res;
}
return data;
}
request.interceptors.request.use(
config => {
if (config.token) {
config.headers[config.tokenKey] = config.token
}
return config
},
err => {
console.error("err:", err);
return Promise.reject(err)
}
)
request.interceptors.response.use(
response => {
const res = response.data
const {code} = res;
if (code !== 200) {
return Promise.reject(new Error(res))
}
return Promise.resolve(extractResponse(res));
},
err => {
console.error("err:", err);
return Promise.reject(err)
}
)
export default request;
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/APIJSON/APIJSON-Builder.git
git@gitee.com:APIJSON/APIJSON-Builder.git
APIJSON
APIJSON-Builder
APIJSON-Builder
master

搜索帮助