2017-02-27 29 views
0

documentation告诉我们,一个解析器具有这种形式:如何在graphql apollo-server突变解析程序中发出错误信号?

fieldName: (obj, args, context, info) => result 

而这结果是nullundefined如果“对象找不到”。

其他错误怎么样 - 例如,如果访问未被授权?

您似乎无法直接“返回”错误,因为结果必须与模式匹配。

我试过在解析器中抛出一个异常,这几乎是正确的:客户端得到一个ApolloError异常消息:很棒。但是apollo-server发出一个堆栈跟踪,就好像这个异常没有被处理。这看起来不正确。

因此,这个问题:应该怎么做?


阿波罗服务器堆栈跟踪,在情况下,它可以帮助:

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) 

回答

1

我发现堆栈跟踪被发出,因为GraphQLOptions.debug默认设置是true

在服务器初始化时将其设置为false会清除所有内容。

结论:抛出异常是正确的做法。

相关问题