Ember JS:断言失败:`AdapterError`需要json-api格式化的错误数组

时间:2018-01-29 12:52:01

标签: ember.js json-api

我正在使用JSONAPIAdapter创建我的第一个Ember / Phoenix应用程序。在做帖子请求时,Ember以$('tr:active')

回复

以下是相关代码:

适配器/ application.js中

<table id="ChainResultsTable" class="table table-condensed table-hover table-striped">
    <thead>
        <tr>
            <th>
                <div>
                    <div>
                        Last Updated
                    </div>
                    <div>
                        Last Updated
                    </div>
                </div>
            </th>
            <th>
                <div>
                    <div>
                        Properties
                    </div>
                    <div>
                        Properties
                    </div>
                </div>
            </th>
            <th>
                <div>
                    <div>
                        Number of Properties
                    </div>
                    <div>
                        Number of Properties
                    </div>
                </div>
            </th>
            <th>
                <div>
                    <div>
                        Chain Status
                    </div>
                    <div>
                        Chain Status
                    </div>
                </div>
            </th>
            @if (Model.ShowChaseDetails)
            {
                <th>
                    <div>
                        <div>
                            Activity
                        </div>
                        <div>
                            Activity
                        </div>
                    </div>
                </th>
            }
            <th class="scrollbarhead"></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var row in Model.ChainSearchRowList.Data)
        {
            <tr data-chainid="@row.ChainId" data-url="/EstateAgents/ChainDetails/Index/@row.ChainId" tabindex="0">

                <td style="width: 150px">
                    @row.LastUpdated.TimeAgo()
                </td>
                <td>
                    @Html.Raw(row.Postcodes.Replace(" ", "&nbsp;").Replace(",", "&nbsp;&nbsp; "))
                </td>
                <td style="width: 150px">
                    @row.NodeCount
                </td>
                <td style="width: 120px">
                    @switch (row.ChainStatusId)
                    {
                        case ChainStatusValues.Active:
                            {
                                <span>@ChainStatusDescriptions.Active</span>
                            }
                            break;
                        case ChainStatusValues.Archived:
                            {
                                <span>@ChainStatusDescriptions.Archived</span>
                            }
                            break;
                        case ChainStatusValues.Complete:
                            {
                                <span>@ChainStatusDescriptions.Complete</span>
                            }
                            break;
                    }
                </td>
                @if (Model.ShowChaseDetails)
                {
                    <td>

                        @if (row.IsChasable)
                        {
                            switch (row.ChainChaseStatusId)
                            {
                                case ChainChaseStatusValues.ChaseInProgress:
                                    <span>Calling</span>
                                    break;
                                case ChainChaseStatusValues.ChaseWaiting:
                                <span>Waiting for Buyers</span>
                                    break;
                                case ChainChaseStatusValues.ChaseComplete:
                                <span>Complete</span>
                                    break;
                                case null:
                                <span></span>
                                    break;

                                default:
                                <span>Unknown</span>
                                    break;
                            }
                        }
                        else
                        {
                            <span></span>
                        }

                    </td>
                }

            </tr>
        }
        @if (!Model.ChainSearchRowList.Data.Any())
        {
            <tr class="no-results-no-hover">
                <td colspan="100%">
                    No Results
                </td>
            </tr>
        }
    </tbody>
</table>

串行器/ application.js中

Assertion Failed: AdapterError expects json-api formatted errors array.

请求有效负载:

import DS from 'ember-data';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
import config from '../config/environment';

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {

});

响应有效载荷:

import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({

});

为什么Ember会一直给我这个错误?

2 个答案:

答案 0 :(得分:0)

您的回复有效负载不正确。您正在使用 json-api 。因此,您的有效负载必须遵循json-api specification。您的请求 - 有效负载看起来正确但请查看错误必须serialized。 json-api错误响应必须包含一个包含错误对象数组的根键“errors”。关于documenation,错误可能包含多个成员,但最重要的两个是详细信息来源

以下是一个例子:

{
  "errors":[
    {
       "detail": "can't be blank",
       "source": {
         "pointer": "data/attributes/name"
       }
    }
  ]
}

-key包含一个持有json-api指针的json对象。借助此指针信息,ember的JSONAPI-Adapter将错误添加到记录的相应属性中。请注意,您的后端需要发送 422 HTTP状态代码(不可处理的实体)。

如果可行,您可以在客户端执行类似的操作:

{{#each model.errors.name as |error|}}
  <div class="error">
    {{error.message}}
  </div>
{{/each}}

如何在后端序列化错误?你在使用ja_serializer吗?如果没有,我会推荐它,因为ja_serializer可以默认序列化json-api-errors。

答案 1 :(得分:0)

由wuarmin链接的documentation明确指出(他们的首都,我的斜体):

  

错误对象必须以错误

键入的数组返回

您的API响应“errors键具有单个对象作为值,而不是数组。