2016-08-24 9 views
6

सर्वर शुरू पर (node index.js) मैं अपने GraphQL NodeJS सर्वर के साथ निम्न त्रुटि हो रही है:GraphQL args त्रुटि: तर्क प्रकार इनपुट प्रकार होना चाहिए, लेकिन मिल गया: समारोह GraphQLObjectType (config) {

Error: Query.payment(data:) argument type must be Input Type but got: function GraphQLObjectType(config) { _classCallCheck(this, GraphQLObjectType);

यह त्रुटि हुआ

 args: { 
      data: { type: graphQL.GraphQLObjectType } 
     }, 
: जब मैं एक ऑब्जेक्ट प्रकार के लिए एक स्ट्रिंग

 args: { 
      data: { type: graphQL.GraphQLString } 
     }, 

से अपने मूल आर्ग बदल 0

मुझे ऑब्जेक्ट प्रकार की आवश्यकता है क्योंकि मुझे पैराम्स के रूप में कई फ़ील्ड भेजने की आवश्यकता है।

GraphQL सर्वर:

var Query = new graphQL.GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
     payment: { 
      type: graphQL.GraphQLString, 
      args: { 
       data: { type: graphQL.GraphQLObjectType } 
      }, 
      resolve: function (_, args) { 
       // There will be more data here, 
       // but ultimately I want to return a string 
       return 'success!'; 
      } 
     } 
    } 
}); 

मैं इसे कैसे एक वस्तु स्वीकार करने की अनुमति कर सकते हैं?


दृश्यपटल (यदि आवश्यक हो लेकिन त्रुटि इससे पहले कि मैं भी इस भेज हो रहा है।):

var userQuery = encodeURIComponent('{ payment (data: { user : "test" })}'); 

$.get('http://localhost:4000/graphql?query=' + userQuery, function (res) { 
     //stuff 
}); 

उत्तर

12

आप एक तर्क के रूप वस्तु का उपयोग करना चाहते हैं, तो आप GraphQLInputObjectType बजाय GraphQLObjectType उपयोग करना चाहिए। और ध्यान रखें कि ग्राफ़क्यूएल दृढ़ता से प्रकार आधारित है, इसलिए आपको सामान्य GraphQLObjectType का उपयोग तर्क प्रकार के रूप में करने की अनुमति नहीं है और फिर गतिशील रूप से तर्क पूछता है।

// your arg input object 
var inputType = new GraphQLInputObjectType({ 
    name: 'paymentInput', 
    fields: { 
     user: { 
      type: new GraphQLNonNull(GraphQLString) 
     }, 
     order: { 
      type: GraphQLString 
     }, 
     ...another fields 
    } 
}); 

var Query = new graphQL.GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
     payment: { 
      type: graphQL.GraphQLString, 
      args: { 
       data: { type: new GraphQLNonNull(inputType) } 
      }, 
      resolve: function (_, args) { 
       // There will be more data here, 
       // but ultimately I want to return a string 
       return 'success!'; 
      } 
     } 
    } 
}); 
+0

धन्यवाद भगवान डेव: आप स्पष्ट रूप से इस इनपुट वस्तु में हर संभव क्षेत्रों को परिभाषित (और चुनें जो उनमें से अनिवार्य हो सकता है और जो नहीं होता) इस दृष्टिकोण

कोशिश उपयोग करने के लिए है। मैंने इसे 'उत्परिवर्तन' में बदलने और फ़ील्ड निर्दिष्ट करने के लिए समाप्त कर दिया। बीटीडब्ल्यू, दो और प्रश्न: '1) 'क्या एनकोडुरिकॉम्पोनेंट (' {भुगतान (डेटा: {उपयोगकर्ता:" परीक्षण "})} 'से' 'मेरी पोस्ट क्वेरी लिखने का एक बेहतर तरीका है?'; ऑब्जेक्ट बड़ा होने पर यह प्रत्येक फ़ील्ड को मैन्युअल रूप से निर्दिष्ट करने में अनावश्यक हो जाता है। '2) 'ग्राफ़क्यूएल को' क्वेरी 'की आवश्यकता होती है, भले ही मुझे केवल' उत्परिवर्तन 'की आवश्यकता हो। क्या मुझे हमेशा एक प्रश्न पूछना आवश्यक है या कहीं कहीं विकल्प हैं? – Growler

+0

'1) 'मुझे लगता है कि आप अपने दिए गए उदाहरण के अनुसार ग्राफक्ल कॉल करने के लिए jquery AJAX का उपयोग कर रहे हैं। दुर्भाग्य से मैं इस परियोजना में आपकी सहायता नहीं कर सकता क्योंकि मैं अपने प्रोजेक्ट में 'रिएक्टजेएस' फ्रंटएंड पर 'रिले' का उपयोग कर रहा हूं, जो इसके लिए ज़िम्मेदार है। '2) 'जाहिर है,' क्वेरी 'हमेशा स्कीमा में आवश्यक है। 'Graphql-js' स्रोत [कोड] पर एक नज़र डालें (https://github.com/graphql/graphql-js/blob/master/src/type/schema.js#L58) मुझे उम्मीद है कि मेरे पास है कम से कम कुछ के साथ आपकी मदद की – LordDave

संबंधित मुद्दे