Backbone.js Обработка ошибок - как вы это делаете?
Мне интересно, как люди обычно обрабатывают ошибки с помощью backbone.js. Было бы хорошо, если бы что-то всплывало каждый раз, когда я вызываю model.save(что в свою очередь вызывает Backbone.sync). Дело в том, как знает backbone.js, когда на сервере возникла ошибка или успех? Я понимаю, что было бы известно, была ли ошибка сервера 500 или что-то в этом роде (о чем jquery знает с тех пор, как Backbone.sync вызывает jQuery.ajax), но я хочу иметь возможность передавать сообщения и другие коды, чтобы я мог дать более значимую ошибку сообщения пользователю.
У меня есть одна идея и мне понравится какая-то обратная связь. Идея состоит в том, чтобы переопределить Backbone.sync. Новая синхронизация получает ответ от сервера, который должен быть в определенном формате. Этот формат будет выглядеть примерно так:
ServerResponseObject:
> ResponseCode
> Message
> Model
Ничего необычного, но в принципе вместо того, чтобы просто возвращать обычную модель, она завершается с помощью ResponseCode
и Message
, которые могут быть показаны пользователю.
Это нормальный способ сделать это? Какой другой подход лучше?
Спасибо!
Ответы
Ответ 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 ошибками, когда это было действительно не так. У клиента не было искаженного синтаксиса или каких-либо ошибок на уровне протокола, была только некоторая проблема с чем-то, где нам нужен был более тонкий ответ, и это дало его нам. После того, как мы сделали это, все оказались намного счастливее на стороне клиента и сервера.