Mam @ ngrx/store i efekty działają dobrze, jednak po prostu zdałem sobie sprawę, że będzie wiele wywołań API (w efektach), a jeśli którykolwiek z tych zwrotów błąd 401 powinienem przekierować użytkownika na stronę logowania. Mój problem polega na tym, że nie chcę tego sprawdzać w każdym pojedynczym efekcie, to byłby tonowy dodatkowy kod dla tego samego. Powiedzmy na przykład mam kod jak poniżej:Angular 2, przechwytywanie 401 w @ ngrx/effects
efektu Sample
@Effect() getMe$ = this.actions$
.ofType(GET_ME)
.map(action => action.payload)
.switchMap(payload => this.userService.me()
.map(res => ({ type: GET_ME_SUCCESS, payload: res }))
.catch(() => Observable.of({ type: GET_ME_FAILURE }))
);
userService.me()
me(): Observable<User> {
return this.apiService.get(`/auth/me`);
}
apiService.get()
get(endpoint: string): Observable<any> {
return this.http.get(`${this.base}${endpoint}`, this.options())
.map(res => res.json());
}
Działa to doskonale, ale nie jestem pewien, jak sobie z tym poradzić, gdy API zwróci . Gdzie powinienem przekierować użytkownika globalnie w takim przypadku? Czy powinienem utworzyć akcję dla tej sprawy? Gdzie zatem powinienem wysłać tę akcję? Czy robię to zupełnie źle?
Każda pomoc we właściwym kierunku zostałaby doceniona!
Dobrze, że wydaje się działać, dzięki! Jeszcze jedno pytanie, jeśli nie masz nic przeciwko: czy istnieje sposób na wywołanie innej akcji (CLEAR_TOKEN) przed nawigacją? Observables to dla mnie coś nowego. :) – Andrew
Tak, to możliwe. Zaktualizowałem odpowiedź. – cartant