首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从rest服务admin-on-rest返回列表时出错

从rest服务admin-on-rest返回列表时出错
EN

Stack Overflow用户
提问于 2017-08-15 10:59:17
回答 2查看 201关注 0票数 0

在我的第一个管理组件上,我得到了以下错误。

uncaught at handleFetch TypeError: newRecords.reduce is not a function

当我尝试查询rest-api时。我使用了大多数提供的简单rest客户端,并加入了一些额外的安全头。

我对我的API的响应是:

代码语言:javascript
复制
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Content-Range: Account 0-0/1
Server: Kestrel
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Range
Request-Context: appId=cid-v1:9f32da6c-a0dd-445f-b59f-d5d01ee6c462
X-AA-Request-ID: ad76be2b-0a29-4179-8fab-6ac0b83e411b
X-SourceFiles: =?UTF-8?B?RTpcRGV2XEFBSHViXEFBLkh1Yi5TZXR0aW5ncy5TZXJ2aWNlXEFBLkh1Yi5TZXR0aW5ncy5TZXJ2aWNlXGFwaVx2MVxhY2NvdW50?=
X-Powered-By: ASP.NET
Date: Tue, 15 Aug 2017 02:56:56 GMT

响应的正文包含:

代码语言:javascript
复制
{"data":[{"changeManagements":[],"serviceProfiles":[],"id":1,"login":"cuken","permissionLevel":9001,"note":"This is a dev test user"}],"totalItems":1}

编辑

下面是我从简单的rest客户端示例中修改的fetch.js文件:

代码语言:javascript
复制
import HttpError from './HttpError';

export const fetchJson = (url, options = {}) => {
    const requestHeaders = options.headers || new Headers({
        Accept: 'application/json',
        'X-AA-ClientName': 'fc5f3712-64fc-4ca4-9e5f-d4b6edeb46d4',
        'X-AA-ApiKey': '80b4ccbf-a741-42ad-aacc-50c4309de8e6',
    });
    if (!(options && options.body && options.body instanceof FormData)) {
        requestHeaders.set('Content-Type', 'application/json');
    }
    if (options.user && options.user.authenticated && options.user.token) {
        requestHeaders.set('Authorization', options.user.token);
    }

    return fetch(url, { ...options, headers: requestHeaders })
        .then(response => response.text().then(text => ({
            status: response.status,
            statusText: response.statusText,
            headers: response.headers,
            body: text,
        })))
        .then(({ status, statusText, headers, body }) => {
            let json;
            try {
                json = JSON.parse(body);
            } catch (e) {
                // not json, no big deal
            }
            if (status < 200 || status >= 300) {
                return Promise.reject(new HttpError((json && json.message) || statusText, status));
            }
            return { status, headers, body, json };
        });
};

export const queryParameters = data => Object.keys(data)
    .map(key => [key, data[key]].map(encodeURIComponent).join('='))
    .join('&');

simple.js文件与存储库中的文件完全相同。

我做错什么了?

EN

回答 2

Stack Overflow用户

发布于 2017-08-16 02:22:19

您需要一个专用的身份验证客户端来处理身份验证类型并执行适当的操作

https://marmelab.com/admin-on-rest/Admin.html#authclient

票数 0
EN

Stack Overflow用户

发布于 2017-08-16 22:11:37

这是因为你的API响应不是simpleRestClient期望的:

它应该只包含

代码语言:javascript
复制
[{"changeManagements":[],"serviceProfiles":[],"id":1,"login":"cuken","permissionLevel":9001,"note":"This is a dev test user"}]

没有datatotalItems密钥。如documentation中所述

简单REST客户端希望

在对GET_LIST调用的响应中包含一个Content-Range头部。该值必须是集合中资源的总数。这使得管理员可以知道总共有多少页的资源,并构建分页控件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45685898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档