Was ich versuche, ist, Kontoinformationen über die http- bcoin abzufragen.
Dazu muss ich
accountName
indem Sie GET /wallet/:id/account
anrufenGET /wallet/:id/account/:accountName
Das Problem ist, dass der erste Aufruf etwas wie ["default", "mySecondAccountName"]
die ich nicht als graphql-Antwort parsen oder direkt an die zweite GET
z. B. als ich versucht habe abzufragen, indem ich folgende Abfrage nutze,
query (id: "primary") @rest(type: AccountName, path: "/wallet/:id/account") {
default
Ich bekomme Error: Network error: Cannot create property 'default' on string 'default'
Ich konnte im Dokument keinen Hinweis finden, aber dies scheint ein sehr häufiger Fall zu sein, daher muss mir etwas sehr Einfaches fehlen. Ich wäre sehr dankbar, wenn mir jemand zeigen könnte, wonach ich suchen sollte
Ich vermute nur, da ich mit Bcoin nicht vertraut bin, aber hier ist ein Vorschlag:
query Account(id: $id){
account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}
Dann erhalten Sie die Ergebnisse aus den Daten und übergeben sie an eine neue Abfrage, die die Kontodetails abruft.
Danke für die freundliche und schnelle Antwort. @fbartho
Vielleicht hätte ich bcoin nicht erwähnen sollen, mein Problem ist einfacher
Im Beispiel der @export
Direktive im Dokument gibt es ein Beispiel für den zweimaligen Aufruf des REST-Endpunkts .
Meine Frage ist, was soll ich tun, wenn die erste Abfrage in diesem Beispiel ein Array von Scalar anstelle eines Arrays von Objekten zurückgibt?
da es keinen Schlüssel hat, scheint es keine Möglichkeit zu geben, anzugeben, welches Argument exportiert werden soll.
Ich habe auch versucht, @export
und stattdessen abzufragen, wie Sie es erwähnt haben, aber das Ergebnis des Abrufs ist {}
mit folgender Warnung
Missing field account in {}
Übrigens denke ich an deinen Vorschlag
query Account(id: $id)
sollte sein
query Account($id: id)
Ich habe herausgefunden, dass beim Ausführen des von Ihnen vorgeschlagenen Befehls, dh
query Account(id: $id){
account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}
Es führt keine Abfrage aus und gibt nur {}
als data
.
Also muss ich { theFieldNameIDesire }
nach der Zeile von account
angeben, das Problem ist, dass ich keinen Feldnamen angeben muss:(
@joemphilips Ich denke, du solltest einen typePatcher verwenden
Ich verwende es, um nicht graphql-konforme Antworten zu verarbeiten, wie z
{
"100": {
"id": 100,
"node_id": 105,
"category_id": 8,
"title": "Title 100",
"highlight": true
},
"138": {
"id": 138,
"node_id": 106,
"category_id": 7,
"title": "Title 138",
"highlight": false
},
"140": {
"id": 140,
"node_id": 101,
"category_id": 9,
"title": "Title 140",
"highlight": false
},
"158": {
"id": 158,
"node_id": 146,
"category_id": 4,
"title": "Title 158",
"highlight": false
}
}
Abfragedefinition
import { gql } from 'apollo-boost';
export const GET_NEWS_QUERY = gql`
query getNews {
News @rest(type: "News", path: "news") {
data
}
}
`;
RestLink-Konfiguration
const restLink = new RestLink({
uri: API_URL,
typePatcher: {
News: (data, outerType) => {
if (outerType === 'News') {
data = Object.keys(data).map(id => {
const result = data[id];
if (result) {
return {
__typename: 'News',
...result
};
}
});
}
return { data };
}
}
});
Abfragenutzung
```js
render() {
Rückkehr (
if (laden) {
Rückkehr (
);
}
if (error) {
return (
<View>
<Text>Error :(</Text>
</View>
);
}
const news = data && data.News && data.News.data;
const filteredNews = news && news.filter(Boolean);
return (
<Styles.Container>
<Carousel
data={filteredNews}
handleOnPress={this.navigateToScreen}
/>
</Styles.Container>
);
}}
</Query>
);
}
`
``
Entschuldigung, dass ich spät antworte. Ihre Lösung scheint für String/Skalar des Arrays nicht zu funktionieren. Aber es scheint behoben zu sein . Ich werde es nochmal versuchen. Und kann wieder öffnen, wenn ich weiterhin Probleme habe. Vielen Dank.
Hilfreichster Kommentar
@joemphilips Ich denke, du solltest einen typePatcher verwenden
Ich verwende es, um nicht graphql-konforme Antworten zu verarbeiten, wie z
Abfragedefinition
RestLink-Konfiguration
Abfragenutzung
{({ Laden, Fehler, Daten }) => {
Wird geladen...
```js
render() {
Rückkehr (
if (laden) {
Rückkehr (
);
}
}
`
``