我如何使我的回应达到要求的标准

How do I make my response upto the required standard

所以,我有一个后端 rails 应用程序 运行,它响应如下特定请求

{"id": 68,"name": "name","email": "email"}

但是在 ember 中,我遇到了这个错误

Error: Assertion Failed: normalizeResponse must return a valid JSON API document:
* One or more of the following keys must be present: "data", "errors", "meta".
at Object.assert (index.js:163)
at normalizeResponseHelper (-private.js:7428)
at -private.js:13291
at Backburner._run (backburner.js:1010)
at Backburner._join (backburner.js:986)
at Backburner.join (backburner.js:757)
at -private.js:13287
at tryCatcher (rsvp.js:335)
at invokeCallback (rsvp.js:506)
at publish (rsvp.js:492)

我尝试将所有内容包装在 'data' 数组下,然后出现此错误

Error: Assertion Failed: normalizeResponse must return a valid JSON API document:
* Top level of a JSON API document must be an object
at Object.assert (index.js:163)
at normalizeResponseHelper (-private.js:7428)
at -private.js:13291
at Backburner._run (backburner.js:1010)
at Backburner._join (backburner.js:986)
at Backburner.join (backburner.js:757)
at -private.js:13287
at tryCatcher (rsvp.js:335)
at invokeCallback (rsvp.js:506)
at publish (rsvp.js:492)

我如何规范化所有内容以及在哪里,后端还是前端?

更新:我做了一个散列响应 = {:data=>@user},然后返回 response.to_json 我得到了这个

Error: Assertion Failed: Encountered a resource object with an undefined type (resolved resource using (unknown))
at Object.assert (index.js:163)
at Class._normalizeResourceHelper (json-api.js:183)
at Class._normalizeDocumentHelper (json-api.js:133)
at Class._normalizeResponse (json-api.js:228)
at Class.normalizeSingleResponse (json.js:407)
at Class.normalizeSaveResponse (json.js:393)
at Class.normalizeCreateRecordResponse (json.js:351)
at Class.normalizeResponse (json.js:232)
at normalizeResponseHelper (-private.js:7421)
at -private.js:13291

我不知道 Ember,但是根据您提供的错误消息,有两个突出显示的限制。

  • JSON的顶层必须是对象,
  • 该对象必须存在以下键之一:"data"、"errors"、"meta"

鉴于该信息,我会尝试返回此信息:

{"data": {"id": 68,"name": "name","email": "email"} }

ember-data 的默认设置是使用 JSON:API 标准。这不是必需的,所以你有两个选择:

1) 您可以修改服务器上的输出以满足该标准,有一些库可以为您执行此操作,但我还没有走那条路,所以我不是最新的.

2) 您可以告诉 ember 以不同的方式解析您的响应,您可以通过为您的应用程序自定义 adapter 来做到这一点。

我们的 API 看起来很像你的,在我的 app/adapters/application.js 文件中我有:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
});

记录在 https://guides.emberjs.com/release/models/customizing-adapters/。这是一种完全受支持的方式来自定义 ember 以满足您的需求,其他工具如 ember-cli-mirage 也提供对这种结构化程度较低的 REST 适配器方法的支持。

所以,我能够完成这项工作的唯一方法是严格遵守 JSON 标准。

我将我的回复更改为与 ember 指南中指定的格式完全相同

{
    "data": {
        "type": "user",
        "id": "123",
        "attributes": {
            "name": "Jeff",
            "email": "Jeff@abc.com"
        }
    }
}

仍在寻找覆盖它的方法