2017-10-25 2 views
1

Ich rufe eine Report-API mit Nodejs, die mir eine JSON-Antwort gibt. Die API kann mit einer anderen ID (in diesem Fall eine andere Berichts-ID) aufgerufen werden. Zum Beispiel:Zuweisen von JSON in einem GraphQL-Typ in Nodejs

https://report.domain.io/report/1 
    https://report.domain.io/report/2 

und so weiter. Da die ID zu verschiedenen Zeiten unterschiedlich ist, wird es mir unterschiedliche Antworten geben. Der Name des Attributs ist anders. Also kann ich es nicht in einem GraphQLObjectType abbilden. Zum Beispiel, wenn die JSON-Antwort ist folgende:

[ 
    { 
     "modelbrand": "Sony", 
     "modelcode": "F3111", 
     "avg_free_storage": 225401514 
    }, 
    { 
     "modelbrand": "Sony", 
     "modelcode": "F3111", 
     "avg_free_storage": 224547840 
    } 
] 

Dann habe ich es mit GraphQL wie folgt abbilden:

Report() { 
    return new graphql.GraphQLObjectType({ 
     name: "Report", 
     description: "This represents report", 
      fields:() => ({ 
       "modelbrand": {type: graphql.GraphQLString}, 
       "modelcode": {type: graphql.GraphQLString}, 
       "avg_free_storage": {type: graphql.GraphQLString} 
      }) 
    }); 
} 

weil ich weiß, dass die Attribute festgelegt sind. Aber wenn der Name des Attributs// s wie Modellmarke, Modellcode sich zu etwas anderem ändert (offensichtlich wird es für verschiedene Berichte anders sein), dann kann ich es nicht in GraphQLObjectType abbilden. In diesem Fall benötige ich einen anderen Typ (der ein JSON-Typ sein sollte), um diese Antworten zuzuordnen. Leider ist es nicht als primitiver Typ für GraphQL verfügbar. Ich finde keine benutzerdefinierte/skalare Art oder Knotenbibliothek, um dieses Problem zu lösen. Es gibt eine Lösung in stack overflow, aber es scheint, als ob es nicht funktioniert.

Könnte ich bitte eine Lösung dafür bekommen? Ein Nodejs Beispiel wird geschätzt. Vielen Dank.

Antwort

0

Bitte beziehen Sie sich auf graphql-type-json. Dies kann als benutzerdefinierter skalarer JSON-Typ verwendet werden.

In Schemadatei

scalar JSON 
 

 
type User { 
 
    id: ID! 
 
    userDetails: JSON 
 
} 
 

 
type Query { 
 
    getUser(id: ID!): User 
 
}

In Resolver-Datei

import GraphQLJSON from 'graphql-type-json'; 
 
import {User} from './connectors'; 
 

 
const resolvers = { 
 

 
    Query: getUser(_, args) { 
 
    return User.find({ 
 
     where: args 
 
    }); 
 
    }, 
 

 
    JSON: { 
 
    __serialize(value) { 
 
     return GraphQLJSON.parseValue(value); 
 
    } 
 
    } 
 
}

Diese können Sie

helfen