2013-07-31 12 views
7

Qualche idea su come gestire gli errori 401?Gestione dei dati di bordo 401's

Nell'inizializzatore dell'applicazione sto differendo la prontezza e recuperando l'utente corrente tramite ember-data. Se ricevo un 401 l'app muore e diventa inutilizzabile. Mi piacerebbe gestire questo errore e quindi la capacità di avanzamento. Non riesco a trovare una soluzione per questo. Qualsiasi informazione sarebbe apprezzata!

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

ho notato che c'era un similar topic here, ma sembra non essere aggiornati.

risposta

2

Application.initializer non è la posizione corretta per inserire questa logica. È sincrono e il suo scopo è fare cose come aggiungere oggetti personalizzati al contenitore IOC, ecc. Questo codice è più adatto nei ganci model di 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

Ottimo! Non sapevo prima esistesse Modello. Sto ancora riscontrando problemi nell'ottenere l'errore 401 previsto quando cerco di ottenere l'utente autenticato dalla mia API e successivamente di mostrare un modulo di accesso all'utente al posto del contenuto. La funzione di errore non sembra essere colpita quando il 401 ritorna. Qualche idea lì? – bmherold

+0

Ci sono alcuni bug in cui le promesse ingoiano alcune eccezioni, questo potrebbe essere uno. Prova a generare un errore 500 sul server, controlla se questo attiva il gestore. –

+1

A partire da Ember Data v1.0.0-b3, questo funziona (con l'addendum che 'events' dovrebbe essere rinominato' actions', poiché il primo è stato deprecato –

4

La risposta precedente non è aggiornata. Nella versione corrente di Ember (1+) events sono obsoleti e si dovrebbe usare actionsoggetto (invece di funzione).

Ember esempio:

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 esempio:

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 
    } 
    } 
}); 

Con questi gestori di azione l'errore bolla ben al percorso principale, se non ci si ferma prima nel vostro percorso .