#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 несанкционированный, я хочу перенаправить на страницу входа в систему.