【问题标题】:How set graphql-js module in debug mode如何在调试模式下设置 graphql-js 模块
【发布时间】:2019-07-17 11:17:50
【问题描述】:

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

我按照他们的文档进行操作,一切正常,预计会出现 1 个问题:

  • 当进行查询并从深层模块得到错误时,graphql-js 尝试捕获错误并返回带有errors: [...] 属性的结果,但在终端控制台中什么也没说。我想强制 grahql-js 返回实际的错误对象,这样我就可以在查看堆栈时调试问题。

这是api中的代码

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

我搜索了很多主题,但没有人说在调试模式下设置这个包,也没有看到任何参数允许设置调试。有人知道吗?

谢谢!

【问题讨论】:

    标签: javascript server graphql graphql-js


    【解决方案1】:

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

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

    如果您直接在代码中的某处调用graphql 函数,那么您可以自己记录错误。对graphql 的调用会返回一个解析为 ExecutionResult 对象的 Promise,其中包括您的数据和错误。所以你可以这样做:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-14
        • 2018-03-15
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 2014-08-17
        • 2016-06-07
        相关资源
        最近更新 更多