2016-02-25 21 views
7

alt nesnelere karşı args geçmesi yoktur. Bu, kimliğimi sorgudan geçirdiğim kök sorgum. Bu, doğru bir şekilde çözen ana öğrenci nesnesi için iyi çalışır. Ancak, ben adres resolvere kimliği not geçirmek nasıl anlamaya ihtiyacımız var. Ben adres nesnesine args ekleyerek çalıştı ama args Öğrenci nesneden aşağı geçmedi olduğunu gösterir bir hata alıyorum. Benim soru olduğunu: Nasıl GraphQL sunucusunda alt nesnelere istemci sorgudan argümanları geçmek?GraphQL: Nasıl ben yaklaşık 15 farklı DİNLENME görüşmelerinden oluşacaktır bir nesneyi sorgulamak için GraphQL kullanıyorum

let rootQuery = new GraphQLObjectType({ 
    name: 'Query', 
    description: `The root query`, 
    fields:() => ({ 
     Student : { 
      type: Student , 
      args: { 
       id: { 
        name: 'id', 
        type: new GraphQLNonNull(GraphQLString) 
       } 
      }, 
      resolve: (obj, args, ast) => { 
       return Resolver(args.id).Student(); 
      } 
     } 
    }) 
}); 

export default rootQuery; 

Bu benim diğer nesneleri bağlamak benim birincil öğrenci nesnesidir. Bu durumda ADDRESS nesnesini ekledim.

Bunlar benim çözümleyici olan
let Address = new GraphQLObjectType({ 
    name: 'ADDRESS', 
    fields:() => ({ 
     ACTIVE: { type: GraphQLString }, 
     ADDRESS1: { type: GraphQLString }, 
     ADDRESS2: { type: GraphQLString }, 
     ADDRESS3: { type: GraphQLString }, 
     CAMPAIGN: { type: GraphQLString }, 
     CITY: { type: GraphQLString }, 
     STATE: { type: GraphQLString }, 
     STATUS: { type: GraphQLString }, 
     TIMECREATED: { type: GraphQLString }, 
     TYPE: { type: GraphQLString }, 
     ZIP: { type: GraphQLString }, 
    }) 

}); 

export default Address; 

var Resolver = (id) => { 

    var options = { 
     hostname: "myhostname", 
     port: 4000 
    }; 


    var GetPromise = (options, id, path) => { 
     return new Promise((resolve, reject) => { 
      http.get(options, (response) => { 
       var completeResponse = ''; 
       response.on('data', (chunk) => { 
        completeResponse += chunk; 
       }); 
       response.on('end',() => { 
        parser.parseString(completeResponse, (err, result) => { 
         let pathElements = path.split('.');      
         resolve(result[pathElements[0]][pathElements[1]]); 
        }); 
       }); 
      }).on('error', (e) => { }); 
     }); 
    }; 

    let Student=() => { 
     options.path = '/Student/' + id; 
     return GetPromise(options, id, 'GetStudentResult.StudentINFO'); 
    } 

    let Address=() => { 
     options.path = '/Address/' + id + '/All'; 
     return GetPromise(options, id, 'getAddressResult.ADDRESS'); 
    }; 


    return { 
     Student, 
     Address 
    }; 
} 

export default Resolver; 
+0

FallFast: Eğer bunun için iyi bir çözüm buldunuz – Brune

+0

herhangi bir çözüm buldular? – James111

cevap

1
ADDRESSES: { 
    type: new GraphQLList(Address), 
    resolve(obj, args, ast){ 
     return Resolver(args.id).Address(); 
    } 
} 
ADDRESSES geçirilen

args argümanlar geçirilir: Burada

import { 
GraphQLInt, 
GraphQLObjectType, 
GraphQLString, 
GraphQLNonNull, 
GraphQLList 
} from 'graphql'; 

import Resolver from '../../resolver.js' 
import iAddressType from './address.js' 

let Student = new GraphQLObjectType({ 
    name: 'STUDENT', 
    fields:() => ({ 
     SCHOOLCODE: { type: GraphQLString }, 
     LASTNAME: { type: GraphQLString }, 
     ACCOUNTID: { type: GraphQLInt }, 
     ALIENIDNUMBER: { type: GraphQLInt }, 
     MIDDLEINITIAL: { type: GraphQLString }, 
     DATELASTCHANGED: { type: GraphQLString }, 
     ENROLLDATE: { type: GraphQLString }, 
     FIRSTNAME: { type: GraphQLString }, 
     DRIVERSLICENSESTATE: { type: GraphQLString }, 
     ENROLLMENTSOURCE: { type: GraphQLString }, 
     ADDRESSES: { 
      type: new GraphQLList(Address), 
      resolve(obj, args, ast){ 
       return Resolver(args.id).Address(); 
     }} 
    }) 
}); 

ikinci DİNLENME çağrısıyla çözülene adresim nesnesidir ADDRESSES alanı sorgulama zamanında. Çözümleme yönteminde, obj öğrenci nesne olmalıdır ve bunu bir id özelliği varsa, yapmanız gereken tek şey: return Resolver(obj.id).Address();.

İlgili konular