Обработка ошибок Backbone.js - как вы это делаете? - PullRequest
36 голосов
/ 17 ноября 2011

Мне интересно, как люди обычно обрабатывают ошибки с помощью backbone.js. Было бы неплохо, чтобы что-то появлялось каждый раз, когда я вызываю model.save (который в свою очередь вызывает Backbone.sync). Дело в том, как backbone.js узнает, когда на сервере произошла ошибка или успех? Я понимаю, что он знал бы, была ли ошибка сервера 500 или что-то в этом роде (о чем jquery знает, так как Backbone.sync вызывает jQuery.ajax) - но я хочу иметь возможность передавать сообщения и другие коды, чтобы я мог дать более значимую ошибку сообщения пользователю.

У меня есть одна идея, и я хотел бы получить обратную связь. Идея состоит в том, чтобы переопределить Backbone.sync. Новая синхронизация получает ответ от сервера, который должен быть в определенном формате. Этот формат будет выглядеть примерно так:

ServerResponseObject:
  > ResponseCode
  > Message
  > Model

Ничего особенного, но, по сути, вместо того, чтобы просто возвращать простую модель, она обернута ResponseCode и Message, которые могут быть показаны пользователю.

Это нормальный способ сделать это? Любой другой подход, который лучше?

Спасибо!

Ответы [ 2 ]

31 голосов
/ 17 ноября 2011

В моих ушах это звучит немного на сложной стороне, по крайней мере, для начала. Backbone.sync уже сообщит об ошибках, которые вы можете обнаружить в своих моделях .save() метод:

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

( документы ).

Если ваш сервер следует HTTP specs , код ошибки уже предоставлен (500 - ошибка сервера, 404 - модель не найдена, вы знаете ..), и даже если сервер отправляет код ошибки, он все еще может отправлять контент (идеально подходит для вашего сообщения). Таким образом, у вас уже есть все параметры, встроенные в сам протокол HTTP. По моему опыту, вы пишете меньше кода, если работаете с протоколом, а не строите новые слои поверх него.

В вашем error обратном вызове, указанном выше, у вас, вероятно, есть хорошие возможности для вызова остальной части вашей системы и отправки сообщения об ошибке на некоторую шину сообщений приложения или аналогичную (через собственный механизм событий Backbones или какой-либо выделенный библиотека ).

4 голосов
/ 10 мая 2012

Мы перешли к отправке обратно стандартным форматом JSend некоторое время назад.По сути, это всего лишь JSON-оболочка для ответа, в которой содержатся положения, при которых сообщения и коды ошибок должны возвращаться в дополнение к ожидаемым данным.

Основная причина, по которой нам пришлось это сделать, заключалась в том, что у нас были службы, отвечающиес 400 ошибками, когда это было не совсем правильно.У клиента не было неправильно сформированного синтаксиса или каких-либо ошибок на уровне протокола, была просто какая-то проблема с чем-то, где нам требовался более детальный ответ, и это давало его нам.После того, как мы это сделали, все стали намного счастливее как на стороне клиента, так и на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...