2017-10-02 5 views
2

J'ai un service partagé dans toute mon application qui gère l'authentification, je suis en train de logique abstraite mon élément dans la mesure des requêtes http possible, cependant, tous les bits de la documentation que j'ai Vu semble vouloir me renvoyer le httpClient Observable, et m'abonner à lui et effectuer toute la logique pour gérer les résultats et les erreurs à l'intérieur du composant.Manipulation HttpClient Http erreurs au niveau de service

Mon code actuel de service est complètement cassé, mais il ressemble à ceci:

userLogin(email: String, password: String) { 
    const body = { email: email, password: password }; 
    return this.httpClient.post('http://localhost/users/login', body).subscribe(
     this.handleResults, 
     this.handleErrors 
    ); 
} 

handleResults(results: any) { 
    if (results.errors) { 
     console.log(results.errors); 
    } else { 
     return results; 
    } 
} 

handleErrors(err: HttpErrorResponse) { 
    if (err.error instanceof Error) { 
     // A client-side or network error occurred. Handle it accordingly. 
     console.log('A ', err.status, ' error occurred:', err.error.message); 
    } else { 
     // The backend returned an unsuccessful response code. 
     // The response body may contain clues as to what went wrong, 
     console.log('Could not connect to server.'); 
     console.log('Backend returned code ' + err.status + ', body was: ' + JSON.stringify(err.error)); 
    } 
} 

Et idéalement sur le module de composants j'aurais quelque chose comme une fonction de rappel qui est appelée lorsque la réponse est prête. Il semble que je suis en train d'aller contre le grain avec des motifs angulaires, mais en même temps, je ne comprends pas pourquoi angulaire nécessiterait la gestion des erreurs pour les erreurs génériques http ne pas être effectuée au niveau des composants.

donc je suppose que la question fondamentale est: comment puis-je gérer les erreurs httpClient au sein du service, plutôt que dans les composants individuels?

+1

Une troisième option serait de gérer les erreurs http via un intercepteur, c'est mon approche préférée puisque vous pouvez gérer les erreurs au niveau mondial " définir et oublier "le style. https://angular.io/guide/http#intercepting-all-requests-or-responses – hayhorse

Répondre

2

Vous pouvez gérer les erreurs ici et revenir encore l'observable, comme si

return this.httpClient.post('http://localhost/users/login', body).catch(this.handleErrors)