2016-02-25 2 views
7

Я использую GraphQL для запроса объекта, который будет состоять из примерно 15 различных вызовов REST. Это мой корневой запрос, в который я передаю идентификатор из запроса. Это отлично подходит для основного объекта студента, который правильно решает. Тем не менее, мне нужно выяснить, как передать идентификатор до адресатора. Я попытался добавить args к объекту адреса, но я получаю сообщение об ошибке, которое указывает, что аргументы не передаются из объекта Student. Поэтому мой вопрос: как передать аргументы из клиентского запроса на под-объекты на сервере GraphQL?GraphQL: Как передать аргументы для объектов sub

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; 

Это мой основной объект-ученик, который я связываю с другими объектами. В этом случае я привязал объект ADDRESS.

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(); 
     }} 
    }) 
}); 

Вот мой адрес объекта, который решается с помощью второго REST вызова:

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: вы нашли решение – Brune

+0

Вы нашли это подходящее решение? – James111

ответ

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

арг переданные АДРЕСА аргументы передаются ADDRESSES во время запроса. В методе разрешения obj должен быть объектом студента, и если у вас есть свойство id, все, что вам нужно сделать, это: return Resolver(obj.id).Address();.

 Смежные вопросы

  • Нет связанных вопросов^_^