【问题标题】:How do I intercept ember-data response and take alternate action.?如何拦截 ember-data 响应并采取替代措施。?
【发布时间】:2014-10-03 08:18:54
【问题描述】:

我在我的 Ember 应用程序中使用最新的 ember-data 库来实现持久性。

以下是我的路线定义:

export default Ember.Route.extend({

    model: function() {
        return this.store.find('language');
    }
});

对此有两种可能的反应:

  • 正常情况:{"language":{"id":123,"name": "English"}}
  • 错误场景:{"error-response":{"status":"398648","message": "internal error."}} 这是所有错误的标准错误消息。

在这两种情况下,都会返回带有“http 200 成功”状态码的响应。所以这意味着 ember 会尝试调用 resolve 回调并为错误场景生成错误。我需要为我们的模型定义处理这个问题。有什么方法可以拦截此响应并采取替代措施?

【问题讨论】:

  • 我遇到了同样的问题。我无法从为不同框架选择的设置中更改服务器响应;-/

标签: ember.js ember-data


【解决方案1】:

您可以在序列化程序中执行此操作,在其中检查 (http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalize) 或类似的东西:

export default Ember.Route.extend({

    model: function() {
        return this.store.find('language').then(function(language){
            //perform your check on the response here
            //if language contains error-response this.transitionTo('errorpage')
            //else return language -- that kinda thing.
        });
    }
});

【讨论】:

    【解决方案2】:

    首先,出现错误时返回 HTTP 代码 200 非常奇怪。 Ember 期望在错误情况下做出合理的响应。这意味着,如果您收到 4xx 错误,ember 将激活 Ember.Route.error 钩子 (http://emberjs.com/guides/routing/loading-and-error-substates/#toc_code-error-code-substates);如果服务器响应 validation error(Ember 中的默认代码 - 422),则 Ember.Adapter 将调用 extractValidationErrors 等等。简而言之,如果您收到错误,请将其视为错误,而不是成功响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      相关资源
      最近更新 更多