我想知道人们通常如何使用backbone.js进行错误处理。每次调用model.save(后者调用Backbone.sync)时弹出一些东西会很好。问题是,backbone.js如何知道服务器上何时出现错误或成功?我知道它会知道是否有500个服务器错误或类似的东西(由于Backbone.sync调用jQuery.ajax,jquery知道) - 但我希望能够传递消息和其他代码以便我可以提供更有意义的错误给用户的消息。
我有一个想法,并希望得到一些反馈。我们的想法是覆盖Backbone.sync。新同步从服务器获得响应,该响应必须采用特定格式。这种格式类似于:
ServerResponseObject:
> ResponseCode
> Message
> Model
没什么好看的,但基本上,它不是只返回普通模型,而是用ResponseCode
和Message
包裹起来,可以向用户显示。
这是正常的做法吗?还有其他方法更好吗?
谢谢!
答案 0 :(得分:31)
在我看来,这听起来有点复杂,至少从一开始就是这样。 Backbone.sync
已经报告了您可以在模型.save()
方法中捕获的错误:
this.mymodel.save(/* ... */, {success: function(model, result, xhr)...,
error: function(model, xhr, options)...}
(docs)。
如果您的服务器端关注HTTP
specs,则会提供错误代码(500
- 服务器错误,404
- 找不到模型,您知道..) ,即使服务器发送错误代码,它仍然可以发送内容(非常适合您的消息)。所以你基本上已经在HTTP
协议本身内置了所有参数。根据我的经验,如果您使用协议而不是在其上构建新层,则可以编写更少的代码。
在上面的error
回调中,您可能很有可能调用系统的其余部分并将错误发布到某些应用程序消息总线或类似内容(通过Backbones自己的事件机制或某些dedicated { {3}})。
答案 1 :(得分:4)
我们暂时改回标准格式JSend。它基本上只是响应的JSON包装器,除了您期望的数据之外还有消息和错误代码的回复。
我们必须这样做的主要原因是因为我们有服务,当它真的不合适时,它会回复400个错误。客户端根本没有格式错误的语法或任何协议级别的错误,我们需要一些更细微的响应并将其交给我们,这只是一些问题。在我们这样做之后,每个人在客户端和服务器端都更加快乐。