json React restClient admin-on-rest

8ulbf1ek  于 2023-06-25  发布在  React
关注(0)|答案(3)|浏览(105)

admin-on-rest允许通过编写自定义REST客户端来使用任何JSON响应。文档中的示例用于从json-server project使用JSON,这很简单。
我想知道在admin-on-rest中使用this api有多容易,只需对restClient做一些小改动。

rks48beu

rks48beu1#

好的-让我们看看admin on rest的源代码(文件admin-on-rest/src/util/fetch.js),我们对fetchJson方法感兴趣。
该方法返回fetch promise,其中它尝试解析代码中的json:

try {
  json = JSON.parse(body);
} catch (e) {
  // not json, no big deal
}

然后返回:return { status, headers, body, json };
但是我们在result中有body,可以重用它,或者我们可以在json中使用解析对象
对于您的示例,我们可以这样做(一些代码丢失):

const httpClient = (url, options = {}) => {
    if (!options.headers) {
        options.headers = new Headers({ Accept: 'application/json' });
    }
    options.withCredentials = true;
        return fetchUtils.fetchJson(url, options).then(({status, headers, body, json}) => {
        json = json['results'] ? json['results'] : json;
        return {status, headers, body, json};
    });
}

所以我们只是在你的schema中用集合重写了json对象:
json = json['results'] ? json['results'] : json;
现在您可以在Admin中使用该客户端

<Admin restClient={restClient}>
...
</Admin>

警告!!!这将影响到管理员的所有请求。但您可以添加额外参数。如果您不想使用json = json['results'] ? json['results'] : json;,您可以添加额外的参数或签入方法fetch

5n0oy7gb

5n0oy7gb2#

我建议你看看https://github.com/dev-family/admiral,它最近才推出,但它已经被证明是一件好事。我认为它应该帮助你解决你的问题。

hvvq6cgz

hvvq6cgz3#

如果我没有弄错,你想有一个URL重写从(例如):https://marmelab.com/admin-on-rest-demo/#/customers/684联系人:https://marmelab.com/admin-on-rest-demo/?customers=684
你可以在restClient.js中重写GET_ONE:case GET_ONE:url = ${apiUrl}/${resource}/${params.id} ;收件人:case GET_ONE:url = ${apiUrl}/?${resource}=${params.id} ;
这将通过一个参数而不是url部分检索记录。

相关问题