如何在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)

我发现正在发出堆栈跟踪,因为 GraphQLOptions.debug的默认设置为 true

在服务器的初始化中将其设置为false清理所有内容。

结论:抛出一个例外是正确的方法。

最新更新