@szzbmy/lowcode-cli
Version:
🐇 lowcode-cli is an efficient cli tool for Rabbitpre plugin component secondary development. ❤️
110 lines (109 loc) • 3.43 kB
JavaScript
;
/**
* 请求函数封装
* @Author: fanyihuo
* @Date: 2021-08-13
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.get = exports.post = void 0;
const node_fetch_1 = __importDefault(require("node-fetch"));
const query_1 = require("./query");
const config_1 = __importDefault(require("../config"));
const logger_1 = __importDefault(require("./logger"));
/**
* 统一请求调用函数
*/
const request = (url, options) => {
const { headers, customOptions = {}, ...finalOptions } = options;
const { body, formData, blob, isExternalReq, buffer } = customOptions;
const finalHeaders = {
...headers,
'rp-lowcode-cli-token': config_1.default.userInfo.token,
};
let finalBody = body;
if (options.method === 'POST' && !formData) {
// @ts-ignore
finalHeaders['Content-Type'] = 'application/json';
finalBody = JSON.stringify(body);
}
logger_1.default.debug('请求开始:', JSON.stringify({
url,
options,
}));
return (0, node_fetch_1.default)(url, {
...finalOptions,
headers: finalHeaders,
body: finalBody,
}).then(res => {
// 返回 blob 格式
if (blob) {
logger_1.default.debug('请求成功, 格式为 blob');
return res.blob();
}
if (buffer) {
logger_1.default.debug('请求成功, 返回 buffer');
return res.buffer();
}
// 返回 json 格式并添加统一校验
return res
.json()
.then(result => {
const resJson = result;
if (isExternalReq) {
return resJson;
}
// 请求成功直接返回 data
if (+resJson.code === 200) {
logger_1.default.debug('请求成功, 返回值为:', JSON.stringify(resJson));
return resJson.data;
}
// 授权问题直接退出
if (+resJson.code === 4003) {
logger_1.default.error(`当前环境(${config_1.default.env})未登录, 请先登录`);
process.exit(1);
}
logger_1.default.debug('请求出错, 返回值为:', JSON.stringify(resJson));
// 其余的问题抛出错误给业务处理
// 这里有可能会报后端的错误, 或者是 node 层的错误
throw new Error(resJson.msg || resJson.errormsg);
})
.catch(error => {
logger_1.default.debug('请求出错, 错误信息:', error);
throw error;
});
});
};
/**
* post 请求封装
* @param url 请求链接
* @param body 请求数据
* @param opts 配置项
*/
async function post(url, body, opts) {
return request(url, {
...opts,
method: 'POST',
customOptions: {
...opts?.customOptions,
body,
},
});
}
exports.post = post;
/**
* get 请求封装
* @param url 请求链接
* @param {QueryType} query 请求 query 参数
* @param opts 配置项
*/
async function get(url, query = '', opts) {
const _url = url + (0, query_1.stringifyQuery)(query);
return request(_url, {
...opts,
method: 'GET',
});
}
exports.get = get;