Наблюдаемая проблема http-перехвата Angular 2

#angular #angular2-services #angular2-http

#angular #angular2-services #angular2-http

Вопрос:

У меня есть пользовательский http-сервис, который переопределяет http-сервис angular 2 по умолчанию. Эта служба устанавливает пользовательские параметры по умолчанию и устанавливает загрузчик при запуске запроса и скрывает загрузчик при завершении запроса.

Я также хочу добавить функциональность для перенаправления пользователя на страницу входа в систему в случае получения несанкционированной ошибки (401, 403) с сервера. Например, ниже приведен мой метод http

 get(url: string, options?: RequestOptionsArgs): Observable<any> {
        this.setLoadingStatus();
        options = this.prepareOptions(options);
        let that = this;
        return super.get(url, options)
            .map(res => {
                this.clearLoadingStatus();
                return res.json();
            })
            .catch(function (err) {
                //redirects user to login and display alert
                that._gs.alertUnauthorized();
                return Observable.empty();
            });
    }
  

Но когда вы тестируете его в браузере, т.Е. Делаете запрос на защищенную страницу, которая возвращает 401 в случае несанкционированного запроса, он перенаправляет на страницу входа, но консоль отображает ошибку ниже:

 GET http://localhost:49547/api/protected/ 401 (Unauthorized)
EXCEPTION: Observable_1.Observable.empty is not a function
ORIGINAL STACKTRACE:
TypeError: Observable_1.Observable.empty is not a function
  

Кто-нибудь может помочь?

Комментарии:

1. Попробуйте super.get().map((res) => {}, (err) => {}); синтаксис?

Ответ №1:

Вам необходимо импортировать empty функцию:

 import 'rxjs/add/observable/empty'
  

Комментарии:

1. Спасибо, это было полезно. Пожалуйста, также укажите, подходит ли использование Observable.empty() в данном случае, или есть какой-либо другой лучший вариант?

2. Я все еще вижу строку ошибки ниже, напечатанную в консоли «zone.js:1274 GET localhost: 49547 / proteccted 401 (несанкционированный)», все в порядке? или это исключение, которое необходимо обработать?

3. Я думаю, что это просто отладочная вещь. Возврат Observable.empty() подавляет ошибку, поэтому, если это то, что вы хотите, вы золотой.

4. Когда сервер возвращает 401 несанкционированный, я хочу перенаправить на страницу входа в систему.