如何在调试模式下设置graphql-js模块

时间:2019-02-23 14:38:54

标签: javascript server graphql graphql-js

我是graphql的新手,并使用[https://github.com/graphql/graphql-js] graphql-js来设置服务器graphql api。

我遵循了他们的文档,一切正常,期望有1个问题:

  • 当进行查询并从深度模块获取错误时,graphql-js尝试捕获错误并使用errors: [...]属性返回结果,但是在终端控制台中什么也没说。我想强制grahql-js返回实际的Error对象,以便在寻找堆栈时可以调试问题。

这是api中的代码

query: (ctx) -> (
      await graphql(
        schema
        query
        context
        graphContext
        variables
      )
    )

我搜索了很多主题,但是没有人说过将其设置为调试模式,也没有任何参数允许设置调试。有人知道吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

通常,您会使用express-graphqlapollo-server(或apollo-server-expressapollo-server-hapi等之类的库来为GraphQL API提供端点。除非您的用例禁止您这样做,否则我强烈建议您使用这些库之一,因为它们提供了许多对开发和生产都有用的附加功能。

使用这些库之一时,只需在配置中提供自定义formatError函数,即可将日志记录添加到端点。请参阅每个图书馆的文档herehere。另外,如果您使用Apollo,则无论如何,完整堆栈跟踪都将在errors数组内公开,但仅限于开发中。

如果您直接在代码中的某个地方调用graphql函数,则可以自己记录错误。对graphql的调用返回一个Promise,该Promise解析为一个ExecutionResult对象,该对象同时包含您的数据和错误。因此,您可以执行以下操作:

const result = await graphql(/* your args */)
if (result.errors) {
  result.errors.forEach((error) => {
    // log the error
  })
}

答案 1 :(得分:0)

您必须在启用了debug选项的情况下实例化图形对象,像这样

var graph = graphql("/api", { debug: true })