Подтвердить что ты не робот

Backbone.js Обработка ошибок - как вы это делаете?

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

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

ServerResponseObject:
  > ResponseCode
  > Message
  > Model

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

(docs).

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

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

Ответ 2

Мы перешли на отправку стандартного формата JSend a назад. Это в основном просто обертка JSON вокруг ответа, в котором есть положения для сообщений и кодов ошибок, которые возвращаются в дополнение к ожидаемым данным.

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