हॉट चॉकलेट वर्कशॉप के बाद और चौथे चरण के बाद, क्वेरी चलाते समय

query GetSpecificSpeakerById {
  a: speakerById(id: 1) {
    name
  }
  b: speakerById(id: 1) {
    name
  }
}

मुझे निम्न त्रुटि मिल रही है।

The ID `1` has an invalid format.

साथ ही, सभी प्रश्नों के लिए एक ही त्रुटि फेंक दी गई है जिसमें पैरामीटर के रूप में आईडी है, शायद यह एक संकेत हो सकता है, क्या जांचना है, मेरे लिए, एक व्यक्ति, जो अभी कार्यशाला चलाता है, यह अभी भी अस्पष्ट है।

इसी तरह के प्रश्न में उत्तर (स्वीकृत नहीं) के आधार पर HotChocolate से पूछताछ करते समय त्रुटि "आईडी `1` का एक अमान्य प्रारूप है", मैंने रिले और इसकी कॉन्फ़िगरेशन की जांच की है और अच्छा लग रहा है।

डि

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton(CreateAutomapper());
    services.AddPooledDbContextFactory<ApplicationDbContext>(options => 
        options.UseSqlite(CONNECTION_STRING).UseLoggerFactory(ApplicationDbContext.DbContextLoggerFactory));
    services
        .AddGraphQLServer()
        .AddQueryType(d => d.Name(Consts.QUERY))
            .AddTypeExtension<SpeakerQueries>()
            .AddTypeExtension<SessionQueries>()
            .AddTypeExtension<TrackQueries>()
        .AddMutationType(d => d.Name(Consts.MUTATION))
            .AddTypeExtension<SpeakerMutations>()
            .AddTypeExtension<SessionMutations>()
            .AddTypeExtension<TrackMutations>()
        .AddType<AttendeeType>()
        .AddType<SessionType>()
        .AddType<SpeakerType>()
        .AddType<TrackType>()
        .EnableRelaySupport()
        .AddDataLoader<SpeakerByIdDataLoader>()
        .AddDataLoader<SessionByIdDataLoader>();
}

स्पीकर प्रकार

public class SpeakerType : ObjectType<Speaker>
{
    protected override void Configure(IObjectTypeDescriptor<Speaker> descriptor)
    {
        descriptor
            .ImplementsNode()
            .IdField(p => p.Id)
            .ResolveNode(WithDataLoader);
    }

    // implementation
}

और खुद से सवाल करें

[ExtendObjectType(Name = Consts.QUERY)]
public class SpeakerQueries
{
    public Task<Speaker> GetSpeakerByIdAsync(
        [ID(nameof(Speaker))] int id, 
        SpeakerByIdDataLoader dataLoader,
        CancellationToken cancellationToken) => dataLoader.LoadAsync(id, cancellationToken);
}

लेकिन बिना किस्मत के। क्या कुछ और है, मैं क्या जाँच सकता हूँ? पूरा प्रोजेक्ट मेरे GitHub पर उपलब्ध है।

2
Sebastian Busek 16 जिंदा 2021, 10:24
क्या गड़बड़ है ... ग्राफ़िकल सर्वर आमतौर पर कहीं अधिक सार्थक त्रुटि के साथ प्रतिक्रिया करता है ... ग्राफ़िक/दस्तावेज़ में जांचें - अपेक्षित तर्क प्रकार, शायद यह एक स्ट्रिंग होना चाहिए
 – 
xadm
16 जिंदा 2021, 15:49

1 उत्तर

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

मुझे लगता है कि आपने इस परियोजना पर रिले समर्थन सक्षम किया है। समापन बिंदु एक मान्य रिले आईडी को निष्पादित करता है।

रिले क्लाइंट को अपारदर्शी आईडी दिखाता है। आप इसके बारे में यहां और अधिक पढ़ सकते हैं: https://graphql.org/learn/global-object-identification/

संक्षेप में, एक रिले आईडी टाइपनाम और आईडी का बेस 64 एन्कोडेड संयोजन है।

ब्राउज़र में एन्कोड या डीकोड करने के लिए आप कंसोल पर बस atob और btoa का उपयोग कर सकते हैं।

तो आईडी "U3BlYWtlcgppMQ==" में मान होता है

"Speaker
i1"

आप इस मान को ब्राउज़र में btoa("U3BlYWtlcgppMQ==") के साथ डीकोड कर सकते हैं और स्ट्रिंग को एन्कोड कर सकते हैं

atob("Speaker
i1")

तो यह क्वेरी काम करेगी:

query GetSpecificSpeakerById {
  a: speakerById(id: "U3BlYWtlcgppMQ==") {
    id
    name
  } 
}
3
Pascal Senn 17 जिंदा 2021, 20:38