UNPKG

@sinosun/lib

Version:

sinosun jsbridge and net toolkit

242 lines (197 loc) 6.92 kB
"use strict"; /** * @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;