【问题标题】:Server side error processing in Ember 1.13.3Ember 1.13.3 中的服务器端错误处理
【发布时间】:2015-10-26 15:06:49
【问题描述】:

在 Ember 1.13.3 中处理服务器端错误的正确方法是什么?

我正在使用 RESTAdapter,我尝试使用/不使用此代码:

handleResponse: function(status, headers, payload) {
if (payload.errors) {
  return new DS.InvalidError(payload.errors);
}
return this._super(...arguments);

}

我的服务器使用这样的 JSON 返回 422:

            {
                errors: [
                    {
                        source: {pointer: 'data'},
                        detail: 'Not saved'
                    }
                ]
            }

在我的路线中,我以这种方式保存模型:

job.save().then(function() {
    console.log('OK');
  }).catch(function(err) {
    console.log('Error: ', err, ' Model ', job.get('isError'));
  });

如果发生错误,流程将进入 catch 块,并且 'err' 是预期的 InvalidError 对象,但 job.get('isError') 返回 false。

现在我不知道如何在组件 UI 中获取错误,因为模型属性 isError 始终为 false。

谢谢

【问题讨论】:

    标签: javascript ember.js ember-data json-api


    【解决方案1】:

    你错过了isError的重点

    如果为 true,则适配器报告它无法将本地更改保存到后端,而不是服务器端验证错误。

    你应该检查的是isValid

    当适配器未报告任何服务器端验证失败时,记录将处于有效状态。

    【讨论】:

    • 你是对的。谢谢。错误地使用'指针:'数据''我想告诉它它是全局错误而不仅仅是属性。但是我怎样才能从模型中得到这个错误呢?如果我使用“指针:'data/attributes/name'”,那么调用 mode.get('errors').get('name') 没有问题。
    • 评论中问题的答案隐藏在已发布的答案中。如果不是验证错误而是其他错误,则响应应该带有不同的错误状态代码,例如。 400(错误请求)。在这种情况下,可以在 Promise 的错误回调中处理错误。通常解析responseText会得到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多