jbzwebsdk
Version:
Shanghai jinbaozheng easy network technology Co.,Ltd sdk
433 lines (391 loc) • 16.7 kB
JavaScript
/**
* Created by cuppi on 2016/11/22.
*/
;
var _defineProperty = require("babel-runtime/core-js/reflect/define-property");
var _defineProperty2 = _interopRequireDefault(_defineProperty);
var _typeof2 = require("babel-runtime/helpers/typeof");
var _typeof3 = _interopRequireDefault(_typeof2);
var _assign = require("babel-runtime/core-js/object/assign");
var _assign2 = _interopRequireDefault(_assign);
var _promise = require("babel-runtime/core-js/promise");
var _promise2 = _interopRequireDefault(_promise);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Object.defineProperty(exports, "__esModule", { value: true });
var axios_1 = require("axios");
var JPromise_1 = require("../structure/JPromise");
/** @module network*/
/**
* 网络请求类
* @hideconstructor
*/
var JNetwork = function () {
function JNetwork() {
(0, _classCallCheck3.default)(this, JNetwork);
this.otherParas = [];
this.otherHeaders = [];
}
(0, _createClass3.default)(JNetwork, [{
key: "useParas",
value: function useParas() {
for (var _len = arguments.length, paras = Array(_len), _key = 0; _key < _len; _key++) {
paras[_key] = arguments[_key];
}
this.otherParas = paras;
return this;
}
}, {
key: "useHeaders",
value: function useHeaders() {
for (var _len2 = arguments.length, headers = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
headers[_key2] = arguments[_key2];
}
this.otherHeaders = headers;
return this;
}
}, {
key: "checkConfigBaseUrl",
/***
* 检查是否配置SDK
* @private
*/
value: function checkConfigBaseUrl() {
if (!JNetwork.baseUrl || JNetwork.baseUrl === '') {
console.log('please check if you have config baseUrl for SDK');
// throw Error('Not Config');
}
}
/**
* 发送请求
* @param method 方法类型
* @param baseUrl 基地址
* @param url 相对地址
* @param parameters 参数
* @param headers 头参数
* @param otherObject 其他相关设置
* @returns {JPromise<any>}
*/
}, {
key: "fetchRequest",
value: function fetchRequest(method, baseUrl, url, parameters, headers, otherObject) {
var _this = this;
this.checkConfigBaseUrl();
var isOk = void 0;
var jpromise = JNetwork.wrapCancelablePromise(new _promise2.default(function (resolve, reject) {
var iHeaders = (0, _assign2.default)({
'Accept': 'application/json',
// TODO: 搞明白
'Content-Type': 'application/x-www-form-urlencoded'
// 'Content-Type': 'application/json'
}, headers);
var axiosConfig = JNetwork.axiosConfig ? JNetwork.axiosConfig : {};
var jaxios = axios_1.default.create((0, _assign2.default)({ method: method, timeout: otherObject ? otherObject.timeout : JNetwork.timeout, params: parameters, baseURL: baseUrl, headers: iHeaders }, axiosConfig));
jaxios.interceptors.request.use(function (config) {
var otherParas = {};
_this.otherParas.forEach(function (key) {
if ((typeof key === "undefined" ? "undefined" : (0, _typeof3.default)(key)) == "object") {
otherParas = (0, _assign2.default)({}, otherParas, key);
return;
}
var globalParas = JNetwork.delegate.globalParas;
if (!globalParas) {
console.error('未找到全局参数,请确认是否设置globalParas');
return;
}
var globalParaFunc = null;
if (typeof globalParas == "function") {
globalParaFunc = globalParas()[key];
} else if ((typeof globalParas === "undefined" ? "undefined" : (0, _typeof3.default)(globalParas)) == "object") {
globalParaFunc = globalParas[key];
}
if (globalParaFunc) {
var globalPara = null;
if (typeof globalParaFunc == "function") {
globalPara = globalParaFunc();
} else {
globalPara = globalParaFunc;
}
if ((typeof globalPara === "undefined" ? "undefined" : (0, _typeof3.default)(globalPara)) == "object") {
otherParas = (0, _assign2.default)({}, otherParas, globalPara);
} else if (typeof globalPara == "string" || typeof globalPara == "number") {
otherParas[key] = globalPara;
} else {
console.log('全局变量类型不正确:' + key);
}
} else {
console.log('不存在的全局变量:' + key);
}
});
var otherHeaders = {};
_this.otherHeaders.forEach(function (key) {
if ((typeof key === "undefined" ? "undefined" : (0, _typeof3.default)(key)) == "object") {
otherHeaders = (0, _assign2.default)({}, otherHeaders, key);
return;
}
var globalHeaderFunc = JNetwork.delegate.globalHeaders()[key];
if (globalHeaderFunc) {
var globalHeader = globalHeaderFunc();
if ((typeof globalHeader === "undefined" ? "undefined" : (0, _typeof3.default)(globalHeader)) == "object") {
otherHeaders = (0, _assign2.default)({}, otherHeaders, globalHeader);
} else if (typeof globalHeader == "string" || typeof globalHeader == "number") {
otherHeaders[key] = globalHeader;
} else {
console.log('全局变量类型不正确:' + key);
}
} else {
console.log('不存在的全局变量:' + key);
}
});
config.params = (0, _assign2.default)({}, config.params, otherParas);
config.headers = (0, _assign2.default)({}, config.headers, otherHeaders);
return JNetwork.delegate.requestInterceptor(config);
}, function (error) {
return JNetwork.delegate.requestInterceptorError(error);
});
jaxios.interceptors.response.use(function (response) {
return JNetwork.delegate.responseInterceptor(response);
}, function (error) {
return JNetwork.delegate.responseInterceptorError(error);
});
var _response = null;
// TODO: 隐性bug 只有post方法
jaxios.request({ url: url }).then(function (response) {
isOk = response.status === 200;
_response = response;
return response.data;
}).then(function (responseJson) {
if (isOk) {
if (!responseJson.errorCode) {
if (JNetwork.delegate.resolveInterceptor(_response, responseJson.data)) {
resolve(responseJson.data);
}
} else {
if (JNetwork.delegate.rejectInterceptor(_response, JNetwork.generalError(responseJson.message, responseJson.errorCode))) {
if (responseJson.errorCode == 10022) {
reject(JNetwork.notLoginError(10022));
} else {
reject(JNetwork.generalError(responseJson.message, responseJson.errorCode));
}
}
}
} else {
reject(responseJson);
}
}).catch(function (error) {
// 请求超时
if (error.message.indexOf('timeout') != -1) {
reject(new Error('请求超时, 请稍后重试'));
} else {
reject(error);
}
});
}));
return jpromise;
}
/**
* 高自由度POST方法
* @param {string} baseUrl 基地址
* @param {string} url 相对地址
* @param {object} parameters 地址参数
* @param {object} headers 头参数
* @param {object} otherObject 其他可用配置
* @returns {Promise} 异步请求块
*/
}, {
key: "getCarryData",
value: function getCarryData() {
var carryData = null;
if (JNetwork.carryData) {
if (typeof JNetwork.carryData == "function") {
carryData = JNetwork.carryData();
}
if ((0, _typeof3.default)(JNetwork.carryData) == "object") {
carryData = JNetwork.carryData;
}
}
return carryData || {};
}
}, {
key: "freedomPOST",
value: function freedomPOST(baseUrl, url, parameters, headers, otherObject) {
return this.fetchRequest('post', baseUrl, url, parameters, headers, otherObject);
}
}, {
key: "freedomGET",
value: function freedomGET(baseUrl, url, parameters, headers, otherObject) {
return this.fetchRequest('get', baseUrl, url, parameters, headers, otherObject);
}
}, {
key: "POST",
value: function POST(url, parameters, headers, otherObject) {
return this.freedomPOST(JNetwork.baseUrl, url, (0, _assign2.default)({}, this.getCarryData(), parameters), headers, (0, _assign2.default)({ timeout: JNetwork.timeout }, otherObject));
}
}, {
key: "GET",
value: function GET(url, parameters, headers, otherObject) {
return this.freedomGET(JNetwork.baseUrl, url, (0, _assign2.default)({}, this.getCarryData(), parameters), headers, (0, _assign2.default)({ timeout: JNetwork.timeout }, otherObject));
}
}], [{
key: "useParas",
value: function useParas() {
var instance = new this();
for (var _len3 = arguments.length, paras = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
paras[_key3] = arguments[_key3];
}
instance.otherParas = paras;
return instance;
}
}, {
key: "useHeaders",
value: function useHeaders() {
var instance = new this();
for (var _len4 = arguments.length, headers = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
headers[_key4] = arguments[_key4];
}
instance.otherHeaders = headers;
return instance;
}
}, {
key: "instance",
value: function instance() {
if (!this._instance) {
this._instance = new this();
}
return this._instance;
}
/**
* 验证失败
* @private
* @returns {Promise}
*/
}, {
key: "failedAuthorizationNetwork",
value: function failedAuthorizationNetwork() {
return new _promise2.default(function (resolve, reject) {
reject(new Error('authorization error'));
});
}
/**
* 不存在的方法
* @private
* @returns {Promise}
*/
}, {
key: "unrealizedMethod",
value: function unrealizedMethod() {
return new _promise2.default(function (resolve, reject) {
reject(new Error('unrealized method'));
});
}
/**
* 普通异常
* @param {error} errorMessage
* @param {number} code
* @returns {Error}
*/
}, {
key: "generalError",
value: function generalError(errorMessage, code) {
var resultError = new Error(errorMessage);
(0, _defineProperty2.default)(resultError, 'errorCode', { value: code });
return resultError;
}
/**
* 没有登录异常
* @param code
* @returns {any}
*/
}, {
key: "notLoginError",
value: function notLoginError(code) {
var error = new Error('NotLogin');
(0, _defineProperty2.default)(error, 'errorCode', { value: code });
return error;
}
/**
* 错误类型
* @private
* @returns {Promise}
*/
}, {
key: "wrongInType",
value: function wrongInType() {
return new _promise2.default(function (resolve, reject) {
reject(new Error('the inType is not exist, please check your inType property in JBZConfig'));
});
}
/**
* 包裹可取消的请求 (使用fetch请求时使用,目前通过axios请求,无需使用)
* @private
* @param promise 异步请求块
* @returns {Promise} 被包裹后的异步请求块
*/
}, {
key: "wrapCancelablePromise",
value: function wrapCancelablePromise(promise) {
return JPromise_1.default.create(promise);
}
}, {
key: "freedomPOST",
value: function freedomPOST(baseUrl, url, parameters, headers, otherObject) {
var _instance;
return (_instance = this.instance()).freedomPOST.apply(_instance, arguments);
}
/**
* 高自由度GET方法
* @param {string} baseUrl
* @param {string} url
* @param {object} parameters
* @param {object} headers
* @param {object} otherObject
* @returns {Promise} 异步请求块
*/
}, {
key: "freedomGET",
value: function freedomGET(baseUrl, url, parameters, headers, otherObject) {
var _instance2;
return (_instance2 = this.instance()).freedomGET.apply(_instance2, arguments);
}
/**
* post请求
* @param {string} url 相对地址
* @param {object} parameters 地址参数
* @param {object} headers 头参数
* @param {object} otherObject 其他参数
* @returns {Promise} 异步请求块
*/
}, {
key: "POST",
value: function POST(url, parameters, headers, otherObject) {
var _instance3;
return (_instance3 = this.instance()).POST.apply(_instance3, arguments);
}
/**
* get请求
* @param {string} url 相对地址
* @param {object} parameters 地址参数
* @param {object} headers 头参数
* @param {object} otherObject 其他参数
* @returns {Promise} 异步请求块
*/
}, {
key: "GET",
value: function GET(url, parameters, headers, otherObject) {
var _instance4;
return (_instance4 = this.instance()).GET.apply(_instance4, arguments);
}
}]);
return JNetwork;
}();
JNetwork.inType = '';
JNetwork.baseUrl = '';
JNetwork.delegate = null;
JNetwork.carryData = {};
JNetwork.axiosConfig = {};
JNetwork.timeout = 10 * 1000;
exports.default = JNetwork;
//# sourceMappingURL=JNetwork.js.map