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