मेरे पास क्लाइंट पर एक क्वेरी फ़िल्टर करने के लिए उपयोग किए जाने वाले दो फ़ील्ड के साथ एक इनपुट प्रकार है।

मैं सर्वर से क्लाइंट तक डिफ़ॉल्ट मान (rentIntervalLow + rentIntervalHigh) पास करना चाहता हूं, लेकिन यह नहीं जानता कि इसे कैसे किया जाए।

नीचे मेरा वर्तमान कोड है। मैं दो भोले समाधान लेकर आया हूं:

  1. क्लाइंट को संपूर्ण स्कीमा का आत्मनिरीक्षण करने देना।

  2. एक वैश्विक कॉन्फ़िग ऑब्जेक्ट है, और एक रिज़ॉल्वर के साथ एक क्वेरेबल Config टाइप करें जो कॉन्फिग ऑब्जेक्ट मान लौटाता है।

उपरोक्त से कोई बेहतर सुझाव क्लाइंट के लिए सर्वर पर डिफ़ॉल्ट/कॉन्फ़िगरेशन मानों को कैसे सुलभ बनाया जाए?

// schema.js
const typeDefs = gql`
  input FilteringOptions {
    rentIntervalLow: Int = 4000
    rentIntervalHigh: Int = 10000
  }

  type Home {
    id: Int
    roomCount: Int
    rent: Int
  }

  type Query {
    allHomes(first: Int, cursor: Int, input: FilteringOptions): [Home]
  }
`

export default typeDefs

मैं अपोलो सर्वर 2.8.1 और अपोलो रिएक्ट 3.0 का उपयोग कर रहा हूं।

0
Fellow Stranger 19 अगस्त 2019, 14:50

1 उत्तर

सबसे बढ़िया उत्तर

किसी विशेष प्रकार के बारे में जानकारी प्राप्त करने के लिए संपूर्ण स्कीमा का आत्मनिरीक्षण करना अनावश्यक है। आप बस एक प्रश्न लिख सकते हैं जैसे:

query {
  __type(name:"FilteringOptions") {
    inputFields {
      name
      description
      defaultValue
    }
  }
}

डिफ़ॉल्ट मान वे मान होते हैं जिनका उपयोग तब किया जाएगा जब कोई विशेष इनपुट मान क्वेरी से छोड़ा गया है। तो डिफ़ॉल्ट का उपयोग करने के लिए, क्लाइंट input allHomes फ़ील्ड के तर्क के लिए एक खाली वस्तु पास करेगा। आप input को {} का एक डिफ़ॉल्ट मान भी दे सकते हैं, जो क्लाइंट को input तर्क बिल्कुल भी प्रदान नहीं करने देगा, जबकि अभी भी रिज़ॉल्वर को न्यूनतम और अधिकतम डिफ़ॉल्ट मान रिले कर रहा है।

यदि, हालांकि, आपका इरादा कुछ क्लाइंट-विशिष्ट तर्क (जैसे सत्यापन, ड्रॉप डाउन मेनू मान, आदि) को चलाने के लिए अपने क्लाइंट को न्यूनतम और अधिकतम मान प्रदान करना है, तो आपको इसके लिए डिफ़ॉल्ट मानों का उपयोग नहीं करना चाहिए। इसके बजाय, यह जानकारी सीधे क्लाइंट द्वारा पूछी जानी चाहिए, उदाहरण के लिए, आपके द्वारा सुझाए गए Config प्रकार का उपयोग करके।

2
Daniel Rearden 19 अगस्त 2019, 14:38