36 votes

Gestion des erreurs dans Backbone.js - comment faire ?

Je me demande comment les gens gèrent généralement les erreurs avec backbone.js. Ce serait bien que quelque chose apparaisse chaque fois que j'appelle model.save (qui à son tour appelle Backbone.sync). Mais comment Backbone.js peut-il savoir si une erreur ou un succès s'est produit sur le serveur ? Je comprends qu'il sache s'il y a eu une erreur de serveur 500 ou quelque chose comme ça (ce que jquery sait puisque Backbone.sync appelle jQuery.ajax) - mais je veux pouvoir passer des messages et d'autres codes pour pouvoir donner des messages d'erreur plus significatifs à l'utilisateur.

J'ai une idée et j'aimerais avoir des retours. L'idée est de remplacer Backbone.sync. Le nouveau sync reçoit une réponse du serveur, qui doit être dans un format particulier. Ce format serait quelque chose comme :

ServerResponseObject:
  > ResponseCode
  > Message
  > Model

Rien d'extraordinaire, mais en fait, au lieu de renvoyer simplement le modèle ordinaire, il est enveloppé dans une balise ResponseCode y Message qui peut être montré à l'utilisateur.

Est-ce la façon normale de procéder ? Y a-t-il une autre approche qui soit meilleure ?

Gracias.

31voto

Jacob Oscarson Points 4275

À mes oreilles, cela semble un peu complexe, du moins au départ. Backbone.sync rapportera déjà des erreurs que vous pouvez attraper dans vos modèles. .save() méthode :

this.mymodel.save(/* ... */, {success: function(model, result, xhr)...,
                              error: function(model, xhr, options)...}

( docs ).

Si votre serveur suit HTTP Spécifications Eh bien, le code d'erreur est déjà fourni ( 500 - erreur de serveur, 404 - modèle non trouvé, vous savez ), et même si le serveur envoie un code d'erreur, il peut toujours envoyer du contenu (parfait pour votre message). Ainsi, vous avez déjà intégré tous les paramètres dans la fonction HTTP le protocole lui-même. D'après mon expérience, vous écrivez moins de code si vous travaillez avec le protocole au lieu de construire de nouvelles couches par-dessus.

Dans votre error ci-dessus, vous avez probablement de bonnes possibilités d'appeler le reste de votre système et d'envoyer une erreur à un bus de messages d'application ou similaire (via le mécanisme d'événement propre à Backbones ou un autre mécanisme de type dédié bibliothèque ).

4voto

John Munsch Points 12653

Nous avons commencé à renvoyer le format standard JSend il y a quelque temps. Il s'agit en fait d'une enveloppe JSON autour de la réponse, qui permet de renvoyer des messages et des codes d'erreur en plus des données attendues.

La raison principale pour laquelle nous avons dû le faire était que nous avions des services qui répondaient avec des erreurs 400 alors que ce n'était pas vraiment la chose à faire. Le client n'avait pas de syntaxe malformée ou d'erreur au niveau du protocole, il y avait juste un problème avec quelque chose qui nécessitait une réponse plus nuancée et le service nous l'a donné. Après avoir fait cela, tout le monde a été beaucoup plus satisfait, tant du côté du client que du serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X