ns2-front-module-common
Version:
NS2 common module
106 lines • 4.2 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import { Http as NgHttp, Request, ConnectionBackend, RequestOptions, Headers, BrowserXhr } from "@angular/http";
import { Observable } from "rxjs/Observable";
import { CurrentUserService } from "./current-user.service";
import { Injectable, Injector, ReflectiveInjector } from "@angular/core";
import { HttpErrorService } from "./http-error.service";
import { HttpClient, HttpHandler, HttpXhrBackend, XhrFactory } from "@angular/common/http";
export function httpFactory(injector, backend, defaultOptions) {
return new HttpService(injector, backend, defaultOptions);
}
var HttpService = (function (_super) {
__extends(HttpService, _super);
function HttpService(injector, backend, defaultOptions) {
var _this = _super.call(this, backend, defaultOptions) || this;
_this.injector = injector;
return _this;
}
/**
* Возвращает стандартный HTTP-клиент
* @returns {HttpClient}
*/
HttpService.prototype.getDefaultHttpClient = function () {
if (!this.defaultHttpClient) {
var injector = ReflectiveInjector.resolveAndCreate([
HttpClient,
{ provide: HttpHandler, useClass: HttpXhrBackend },
{ provide: XhrFactory, useClass: BrowserXhr }
]);
this.defaultHttpClient = injector.get(HttpClient);
}
return this.defaultHttpClient;
};
/**
* Переопределяем стандартный метод request(). Добавляем заголовок с токеном
*
* @param url
* @param options
* @returns {Observable<Response>}
*/
HttpService.prototype.request = function (url, options) {
var _this = this;
var userService = this.injector.get(CurrentUserService), token = userService.getToken();
if (typeof url === 'string') {
var headers = new Headers();
headers.append(CurrentUserService.USER_TOKEN_NAME, token);
if (!(options instanceof RequestOptions)) {
options = new RequestOptions();
}
options.headers = headers;
}
else if (url instanceof Request) {
if (typeof url.headers === 'undefined') {
url.headers = new Headers();
}
url.headers.append(CurrentUserService.USER_TOKEN_NAME, token);
}
return Observable.fromPromise(new Promise(function (resolve, reject) {
_super.prototype.request.call(_this, url, options)
.subscribe(function (response) { return resolve(response); }, function (err) {
reject(_this.handleHttpError(err));
});
}));
};
HttpService.prototype.handleHttpError = function (err) {
var message;
var errNo;
try {
var json = err.json();
message = json.hasOwnProperty('error') ? json.error : err.statusText;
errNo = json.hasOwnProperty('errno') ? json.errno : 0;
}
catch (error) {
message = err.statusText;
errNo = 0;
}
var error = {
message: message,
statusCode: err.status,
errNo: errNo,
errorResponse: err
};
this.injector.get(HttpErrorService).handler.emit(error);
return error;
};
return HttpService;
}(NgHttp));
export { HttpService };
HttpService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
HttpService.ctorParameters = function () { return [
{ type: Injector, },
{ type: ConnectionBackend, },
{ type: RequestOptions, },
]; };
//# sourceMappingURL=http.service.js.map