2017-02-27 1 views
0

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) 

Antwort

1

ich, dass der Stack-Trace entdeckt wird, weil die Einstellung von GraphQLOptions.debug Standard ausgegeben werden true ist.

Wenn Sie bei der Initialisierung des Servers auf false setzen, wird alles bereinigt.

Fazit: Eine Ausnahme zu werfen ist der richtige Weg.

Verwandte Themen