如何在 graphql apollo-server 变异解析器中发出错误信号?
Posted
技术标签:
【中文标题】如何在 graphql apollo-server 变异解析器中发出错误信号?【英文标题】:How can I signal an error in a graphql apollo-server mutation resolver? 【发布时间】:2017-07-17 13:13:40 【问题描述】:documentation 告诉我们解析器具有这种形式:
fieldName: (obj, args, context, info) => result
如果“找不到对象”,则结果为 null
或 undefined
。
其他错误怎么办 - 例如,如果访问未授权?
看来您不能直接“返回”错误,因为结果必须与架构匹配。
我尝试在解析器中抛出异常,这几乎是正确的:客户端收到 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 会清除所有内容。
结论:抛出异常是正确的做法。
【讨论】:
以上是关于如何在 graphql apollo-server 变异解析器中发出错误信号?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何从 apollo-server 模块传递 ApolloServer 中的数据源和合并的 graphql 模式和解析器?
使用 graphql 和 apollo-server 在解析器中获取会话
来自 GraphQL 网站的 Apollo-server 教程产生错误
在 apollo-server 中将网关上的联合类型转换为服务 GraphQL 中的标量类型