123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- var constants = require('./constants');
- var utils = require('./utils');
- var Session = require('./session');
- var loginLib = require('./login');
- var noop = function noop() {};
- var buildAuthHeader = function buildAuthHeader(session) {
- var header = {};
- if (session) {
- header[constants.WX_HEADER_SKEY] = session;
- }
- return header;
- };
- /***
- * @class
- * 表示请求过程中发生的异常
- */
- var RequestError = (function () {
- function RequestError(type, message) {
- Error.call(this, message);
- this.type = type;
- this.message = message;
- }
- RequestError.prototype = new Error();
- RequestError.prototype.constructor = RequestError;
- return RequestError;
- })();
- function request(options) {
- if (typeof options !== 'object') {
- var message = '请求传参应为 object 类型,但实际传了 ' + (typeof options) + ' 类型';
- throw new RequestError(constants.ERR_INVALID_PARAMS, message);
- }
- var requireLogin = options.login;
- var success = options.success || noop;
- var fail = options.fail || noop;
- var complete = options.complete || noop;
- var originHeader = options.header || {};
- // 成功回调
- var callSuccess = function () {
- success.apply(null, arguments);
- complete.apply(null, arguments);
- };
- // 失败回调
- var callFail = function (error) {
- fail.call(null, error);
- complete.call(null, error);
- };
- // 是否已经进行过重试
- var hasRetried = false;
- if (requireLogin) {
- doRequestWithLogin();
- } else {
- doRequest();
- }
- // 登录后再请求
- function doRequestWithLogin() {
- loginLib.login({ success: doRequest, fail: callFail });
- }
- // 实际进行请求的方法
- function doRequest() {
- var authHeader = buildAuthHeader(Session.get());
- wx.request(utils.extend({}, options, {
- header: utils.extend({}, originHeader, authHeader),
- success: function (response) {
- var data = response.data;
- var error, message;
- if (data && data.code === -1) {
- Session.clear();
- // 如果是登录态无效,并且还没重试过,会尝试登录后刷新凭据重新请求
- if (!hasRetried) {
- hasRetried = true;
- doRequestWithLogin();
- return;
- }
- message = '登录态已过期';
- error = new RequestError(data.error, message);
- callFail(error);
- return;
- } else {
- callSuccess.apply(null, arguments);
- }
- },
- fail: callFail,
- complete: noop,
- }));
- };
- };
- module.exports = {
- RequestError: RequestError,
- request: request,
- };
|