gpt4 book ai didi

apollo-server - 记录每个请求的 apollo-server GraphQL 查询和变量

转载 作者:行者123 更新时间:2023-12-03 14:45:28 25 4
gpt4 key购买 nike

使用 apollo-server 2.2.1 或更高版本时,如何为每个请求记录查询和变量?

这似乎是一个简单的需求和常见用例,但文档是 very vague ,以及 query传递给 formatResponse 的对象no longerqueryStringvariables特性。

最佳答案

Amit 的答案(今天)有效,但恕我直言,它有点老套,将来可能无法按预期工作,或者在某些情况下可能无法正常工作。

例如,当我看到它时,我想到的第一件事是:“如果查询无效,那可能不起作用”,结果今天它在查询无效时起作用。因为在当前实现中,在验证查询之前评估上下文。但是,这是一个将来可能会更改的实现细节。例如,如果有一天 apollo 团队决定仅在查询被解析和验证之后评估上下文将是一个性能胜利怎么办?这实际上是我所期待的:-)

我想说的是,如果您只是想快速记录一些内容以便调试 dev 中的某些内容。环境,那么 Amit 的解决方案绝对是要走的路。

但是,如果您想要为生产环境注册日志,则使用 context函数可能不是最好的主意。在那种情况下,我会安装 graphql-extensions我会用它们来记录日志,比如:

const { print } = require('graphql');

class BasicLogging {
requestDidStart({queryString, parsedQuery, variables}) {
const query = queryString || print(parsedQuery);
console.log(query);
console.log(variables);
}

willSendResponse({graphqlResponse}) {
console.log(JSON.stringify(graphqlResponse, null, 2));
}
}

const server = new ApolloServer({
typeDefs,
resolvers,
extensions: [() => new BasicLogging()]
});

编辑:

正如丹指出的那样,无需安装 graphql-extensions包,因为它已集成在 apollo-server-core 中包裹。

关于apollo-server - 记录每个请求的 apollo-server GraphQL 查询和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54273194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com