Die documentation sagen uns, dass ein Resolver diese Form hat:Wie kann ich einen Fehler in einem graphql Apollo-Server-Mutationsresolver melden?
fieldName: (obj, args, context, info) => result
Und das Ergebnis ist null
oder undefined
wenn „das Objekt nicht gefunden werden kann“.
Was ist mit anderen Fehlern - zum Beispiel, wenn der Zugriff nicht autorisiert ist?
Es scheint, dass Sie einen Fehler nicht direkt "zurückgeben" können, da das Ergebnis mit dem Schema übereinstimmen muss.
Ich habe versucht, eine Ausnahme im Resolver zu werfen, und das macht fast das Richtige: Der Client bekommt einen ApolloError mit der Ausnahme Nachricht darin: Das ist großartig. ABER der apollo-server gibt einen Stack-Trace aus, als ob die Ausnahme nicht behandelt wurde. Das scheint nicht richtig zu sein.
Daher die Frage: wie soll das gemacht werden?
Der apollo-Server-Stack-Trace, falls es hilft:
Error: test exception message
at /Users/mgregory/NRN/src/agreeonit/apollo_server/resolvers/mutationResolvers.js:29:17
at tryCatcher (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/promise.js:510:31)
at Promise._settlePromise (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/promise.js:567:18)
at Promise._settlePromise0 (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/promise.js:612:10)
at Promise._settlePromises (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/promise.js:691:18)
at Async._drainQueue (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/async.js:138:16)
at Async._drainQueues (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/async.js:148:10)
at Immediate.Async.drainQueues (/Users/mgregory/NRN/src/agreeonit/apollo_server/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:574:20)
at tryOnImmediate (timers.js:554:5)
at processImmediate [as _immediateCallback] (timers.js:533:5)