2013-07-31 15 views
7

Jakieś przemyślenia na temat obsługi błędów 401?Obsługa danych Ember 401's

W inicjatorze aplikacji odradzam gotowość i pobieranie bieżącego użytkownika za pomocą danych ember. Jeśli otrzymam 401 aplikacja zginie i stanie się bezużyteczna. Chciałbym poradzić sobie z tym błędem, a potem z wyprzedzeniem. Nie mogę znaleźć obejścia tego problemu. Wszelkie informacje są mile widziane!

Gist tutaj: https://gist.github.com/unknpwn/6126462

zauważyłem było similar topic here, ale wydaje się być nieaktualne.

Odpowiedz

2

Application.initializer nie jest właściwym miejscem na umieszczenie tej logiki. Jest synchroniczny i jego celem jest np. Dodawanie niestandardowych obiektów do kontenera IOC itp. Ten kod lepiej pasuje do haków model z ApplicationRoute.

App.ApplicationRoute = Ember.Route.extend({ 
    beforeModel: function() { 
    return App.User.find({ filter: "authenticated" }); 
    }, 
    setupController: function(controller, model) { 
    controller.set('loggedIn', true); 
    controller.set('currentUser', model);// or some property of that model 
    }, 
    events: function() { 
    error: function(err) { 
     // error handler called in case of an error. 
     // show the error message to user here 
     // or transition to another route 
    } 
    } 
}); 
+0

Świetnie! Nie wiedziałem, że wcześniej istnieje Model. Nadal mam problemy z wychwytywaniem oczekiwanego błędu 401, gdy próbuję pobrać uwierzytelnionego użytkownika z mojego interfejsu API, a następnie wyświetlam użytkownikowi formularz logowania zamiast treści. Funkcja błędu wydaje się nie być trafiona, gdy 401 wróci. Jakieś myśli tam? – bmherold

+0

Istnieje kilka błędów, w których obietnice pochłaniają pewne wyjątki, może to być jedna. Spróbuj podnieść błąd 500 na serwerze, zobacz, czy to uruchamia procedurę obsługi. –

+1

Począwszy od Ember Data v1.0.0-b3, działa to (z dodatkiem, że 'events' powinno zostać zmienione na' actions', ponieważ pierwsze zostało wycofane.) –

4

Poprzednia odpowiedź jest nieaktualna. W obecnej wersji Ember (1+) events są przestarzałe i powinieneś użyć obiektu actionsobiekt (zamiast funkcji). Przykładem

Ember:

App.ApplicationRoute = Ember.Route.extend({ 
    actions: { 
    error: function(err) { 
     // error handler called in case of an error. 
     // show the error message to user here 
     // or transition to another route 
    } 
    } 
}); 

Ember CLI przykład:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    actions: { 
    error: function(err) { 
     // error handler called in case of an error. 
     // show the error message to user here 
     // or transition to another route 
    } 
    } 
}); 

Tymi koparki działań błąd będzie bańka ładnie na głównej trasie aplikacji, jeśli nie zatrzymać go zanim w trasie .

Powiązane problemy