@sinosun/lib
Version:
sinosun jsbridge and net toolkit
242 lines (197 loc) • 6.92 kB
JavaScript
;
/**
* @author zhongzheng
* @description mpaas的网络请求实现
*/
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
require("core-js/modules/es.regexp.exec.js");
require("core-js/modules/es.string.split.js");
var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-int"));
(0, _defineProperty["default"])(exports, "__esModule", {
value: true
});
var CommErrorCode_1 = require("../CommErrorCode");
var PRODUCT_NAME = "bizmate";
var PROXY_NAME = "bsl";
/**
* 获取通配符信息
*/
function getWildcardInfo(url, productName) {
if (productName === void 0) {
productName = PRODUCT_NAME;
}
var info = {
_server_: "",
_version_: "",
_api_: ""
};
if (url && (0, _indexOf["default"])(url).call(url, "/" + productName + "/") > -1) {
var wildCard = url.split("/" + productName + "/")[1];
var wildCardList = wildCard.split("/");
if (wildCardList.length >= 3) {
info._server_ = wildCardList[0];
info._version_ = wildCardList[1];
info._api_ = wildCard.substr(wildCardList[0].length + wildCardList[1].length + 2);
} else {
console.error("[@sinsoun/lib] 请求url不合法");
}
} else {
info = {
_server_: "proxy",
_version_: "bsl",
_api_: "request"
};
}
return info;
}
var MPaaSNetImpl =
/** @class */
function () {
function MPaaSNetImpl() {}
MPaaSNetImpl.prototype.getProductName = function (encryptConfig) {
var productName = PRODUCT_NAME;
if (encryptConfig && encryptConfig.namespace) {
productName = encryptConfig.namespace;
}
return productName;
};
/**
* @override 获取OperationType
* @param url
* @param params
* @param headers
* @param method
* @return operationType
*/
MPaaSNetImpl.prototype.getOperationType = function (url, data, headers, method, encryptConfig) {
var methodType = method.toUpperCase();
var productName = this.getProductName(encryptConfig);
return "" + ((0, _indexOf["default"])(url).call(url, "/" + productName + "/") > -1 ? PRODUCT_NAME : PROXY_NAME) + methodType;
};
/**
* @override 获取请求参数
* @param url
* @param params
* @param headers
* @param method
* @return requestData
*/
MPaaSNetImpl.prototype.getRequestData = function (url, data, headers, method, encryptConfig) {
var methodType = method.toUpperCase(); // 通过url解析mPaaS网关server名称、verson名称、api名称
var appInfo = {
_server_: "",
_version_: "",
_api_: ""
};
var productName = this.getProductName(encryptConfig);
appInfo = getWildcardInfo(url, productName);
try {
data = JSON.parse(data);
} catch (err) {
data = data;
}
var params = [];
if (methodType === "POST") {
params.push((0, _assign["default"])({
_requestBody: data
}, appInfo));
} else {
(0, _assign["default"])(data, appInfo);
params.push(data);
}
return params;
};
/**
* @override 重写父类实现, 默认使用axios的网络请求实现
* @param url
* @param params
* @param headers
* @param method
*/
MPaaSNetImpl.prototype.doRequest = function (url, data, headers, method, encryptConfig, timeout) {
var _this_1 = this;
if (timeout === void 0) {
timeout = 30000;
}
var _this = this;
return new _promise["default"](function (res, rej) {
// const methodType = method.toUpperCase();
// // 通过url解析mPaaS网关server名称、verson名称、api名称
// let appInfo = {
// _server_: "",
// _version_: "",
// _api_: "",
// };
// appInfo = getWildcardInfo(url);
// try {
// data = JSON.parse(data);
// } catch (err) {
// data = data;
// }
// const params = [];
// if (methodType === "POST") {
// params.push(
// (<any>Object).assign(
// {
// _requestBody: data,
// },
// appInfo
// )
// );
// } else {
// (<any>Object).assign(data, appInfo);
// params.push(data);
// }
var operationType = _this_1.getOperationType(url, data, headers, method, encryptConfig);
var requestData = _this_1.getRequestData(url, data, headers, method, encryptConfig);
console.log("003.params:", requestData, "operationType", operationType);
AlipayJSBridge.call("rpc", {
operationType: operationType,
requestData: requestData,
headers: headers,
timeout: timeout
}, function (result) {
// mPaaS网关结果码说明: https://tech.antfin.com/docs/2/64260#
// rpc result 结果:
// 1、 正确返回 {result: Object, resultCode: 0, resultMessage: "执行成功", bid: "c0a80f5a1669779139062647759709"}
// 2、rpc 异常返回(如网关接口不存在、业务侧httpCode!=200等):{errorMessage: "httpcode-401", error: 6666}
console.log("mPaaS rpc result- :", result); // rpc 本身异常
if (result.errorMessage) {
// 解析mPaaS异常信息为对象:{ code, message, httpCode, responseMessage}
var _errInfo = _this.parseMpaasError(result);
rej(_errInfo);
} else {
// 不是rpc异常,就处理业务返回码
res(result);
}
});
});
};
/**
* 从mPaaS的result中,result.errorMessage不为空表明有rpc请求异常,包括timeout、后端服务返回非200、api接口不通等...
* @param error
* return { code, message, httpCode, responseMessage}
*/
MPaaSNetImpl.prototype.parseMpaasError = function (error) {
// 6666 业务服务返回非200,将http code取出抛上去 {errorMessage: "httpcode-401", error: 6666}
if (error.error == 6666) {
var msg = error.errorMessage.split('-');
if (msg && msg.length >= 2) {
return {
httpCode: (0, _parseInt2["default"])(msg[1]) || CommErrorCode_1.CommErrorCode.MPAAS_RPC_ERROR,
responseMessage: error.errorMessage + "[" + error.error + "]"
};
}
} // 非6666(业务服务返回异常),直接返回mPaaS rpc请求异常
return {
code: CommErrorCode_1.CommErrorCode.MPAAS_RPC_ERROR,
message: error.errorMessage + "[" + error.error + "]"
};
};
return MPaaSNetImpl;
}();
exports["default"] = MPaaSNetImpl;