【问题标题】: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-graphql 或 apollo-server(或 apollo-server-express、apollo-server-hapi 等)这样的库来为您的 GraphQL API 提供端点。除非您的用例禁止您这样做,否则我强烈建议您使用其中一个库,因为它们提供了许多对开发和生产都有帮助的附加功能。
您可以在使用这些库之一时将日志记录添加到您的端点,只需在配置中提供自定义 formatError 函数即可。请参阅每个库的文档 here 和 here。作为奖励,如果您使用 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 })