【问题标题】:How to handle a 400 error with Ember Data (2.4.0-canary)如何使用 Ember Data (2.4.0-canary) 处理 400 错误
【发布时间】:2016-01-02 20:03:24
【问题描述】:

我不知道我的问题是否与我的查询或回复或其他问题有关。

在我的路线中,我使用的是queryRecord

model(params) {
  return this.store.queryRecord('invitation', { 
    'invitation_token' : params.invitationToken 
  });
},

我在服务器端正常接收,但我正在测试邀请令牌不再存在的情况。因此,服务器返回一个带有 json 有效负载的 400,其中包含错误说明。

{"error":"Error finding invitation"}

但回到 ember 方面,我只遇到了两个错误(真的只有一个)。

Error while processing route: accept-invitation Ember Data Request GET /api/users/invitation returned a 400
Error: Ember Data Request GET /api/users/invitation returned a 400

以前是(在 Ember 2.2.1 下):

Error while processing route: accept-invitation Adapter operation failed Error: Adapter operation failed
Error: Adapter operation failed

如果找不到令牌,我应该从服务器返回什么?这些消息看起来像是在 Ember 中发生了一些意想不到的事情。

我假设 400 会告诉 Ember 有一个错误,它会进入路由的错误状态。但相反,它会进入应用程序级别的错误状态,并在日志中吐出这些错误消息。

期待服务器返回 400,所以我不确定 Ember 为何抱怨。我应该返回什么,我应该如何正确处理?

【问题讨论】:

  • 你有没有试过这样的`handleResponse: function(status, headers, payload){ if(status === 400 && payload.error){ return new DS.InvalidError(payload.error); } 返回 this._super(...arguments); }`
  • 谢谢@Bek - 如果我尝试这样做(并调整 InvalidError 的参数)我得到:处理路由时出错:accept-invitation 适配器拒绝提交,因为它无效错误:适配器拒绝了提交,因为它是无效的

标签: ember.js ember-data


【解决方案1】:

我相信您的应用程序应该返回格式不同的响应。根据the JSON API specification

错误对象必须以顶部错误为键的数组形式返回 JSON API 文档的级别。

该规范还规定,可以提供以下成员以及其他成员(完整列表请参见链接)。

title:对不应该出现的问题的简短、易读的摘要 每次发生的问题都会发生变化,除了 本地化的目的。

detail:人类可读的解释 具体到这个问题的发生。像标题一样,这个字段的 值可以本地化

status:适用于该问题的HTTP状态码,表示为 一个字符串值。

如果您尝试返回以下内容,工具的行为如何?

{
  "errors": [
   {
    "status": "400",
    "title": "Error finding invitation"
   }
  ]
}

【讨论】:

  • 对不起,我应该提到我正在使用 Active Record Adapter/Serializer。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多