2017-05-27 4 views
0

私はGraphQLを公式websiteで学んでいます。ノードGraphQLはAPIからヌルデータを解決します

このコードのmy graphqlの目的は、既存のREST APIのラッパーと同じです。

GET: /people/:id 
RESPONSE: 
{ 
    "person": [ 
    { 
     "id": "1", 
     "userName": "mark1", 
     "firstName": "Mark", 
     "lastName": "Zuckerberg", 
     "email": "[email protected]", 
     "friends": [ 
     "/people/2", 
     "/people/3" 
     ] 
    } 
    ] 
} 

と、この次のコードは、私のgraphqlスキーマである

import { 
    GraphQLList, 
    GraphQLObjectType, 
    GraphQLString, 
    GraphQLSchema 
} from "graphql"; 

import fetch from "node-fetch"; 

const BASE_URL = "http://localhost:5000"; 

function getPersonByURL(relativeUrl) { 
    return fetch(`${BASE_URL}${relativeUrl}`) 
     .then(res => res.json()) 
     .then(json => json.person); 
} 

const PersonType = new GraphQLObjectType({ 
    name: "Person", 
    type: "Somebody", 
    fields:() => ({ 
     firstName: { 
      type: GraphQLString, 
      resolve: person => person.firstName 
     }, 
     lastName: { 
      type: GraphQLString, 
      resolve: person => person.lastName 
     }, 
     email: { 
      type: GraphQLString 
     }, 
     id: { 
      type: GraphQLString 
     }, 
     userName: { 
      type: GraphQLString 
     }, 
     friends: { 
      type: new GraphQLList(PersonType), 
      resolve: (person) => person.friends.map(getPersonByURL) 
     } 
    }) 
}); 

const QueryType = new GraphQLObjectType({ 
    name: "Query", 
    description: "the root of all queries", 
    fields:() => ({ 
     person: { 
      type: PersonType, 
      args: { 
       id: { type: GraphQLString } 
      }, 
      resolve: (root, args) => getPersonByURL(`/people/${args.id}`) 
     } 
    }) 
}); 

export default new GraphQLSchema({ 
    query: QueryType 
}); 

私はGraphiqlを使用して要求を実行したとき、それは、各フィールドにnullを返さ:、私はすでにこの応答でのREST APIを持っていることを行うには 。 私は自分のjsonレスポンスをどのように表しているのか、残りのAPIからjsonレスポンスにどのようにアクセスするのか間違っていると思います。

これらはgraphiql

REQUEST 
{ 
    person(id: "1") { 
    firstName 
    } 
} 

RESPONSE 
{ 
    "data": { 
    "person": { 
     "firstName": null 
    } 
    } 
} 

からの要求と結果であるあなたは、任意のヒントを使用して助けてくださいことはできますか?

// ... 
firstName: { 
    type: GraphQLString, 
    resolve: person => JSON.stringify(person) 
}, 
// ... 

次のクエリを実行した後:私は趣旨にごJSONを入れて、怒鳴るようにコードを変更している問題を見つけるために

答えて

1

ここ
{ 
    person(id: "1") { 
    firstName 
    } 
} 

は結果でした

{ 
"data": { 
    "person": { 
     "firstName": "[{\"id\":\"1\",\"userName\":\"mark1\",\"firstName\":\"Mark\",\"lastName\":\"Zuckerberg\",\"email\":\"[email protected]\",\"friends\":[\"/people/2\",\"/people/3\"]}]" 
    } 
    } 
} 

personであり、配列それは明らかにfirstNameと他のプロパティを持っていません。 、答えはhttps://launchpad.graphql.com/j1v0kprrp

+0

はい助けてくれてありがとう:ここ

resolve: (root, args) => getPersonByURL('/people${args.id}.json') .then(persons => persons[0]) 

動作するコードとGraphQLランチパッドです:あなたは、各フィールドのリゾルバやルート型レゾルバのいずれかの配列のラップを解除する必要があります – lloistborn

関連する問題