gpt4 book ai didi

graphql - 将查询/变异操作记录到数据库以进行审计

转载 作者:行者123 更新时间:2023-12-04 17:40:02 25 4
gpt4 key购买 nike

我的目标是运行某种 webhook、云函数,或者说我想在每次查询成功或在 graphql 中成功突变后执行某种操作。
意味着我想记录用户执行的每一个操作(创建和更新内容的历史)。
如何使用 graphql 和 DB 之间的某种中间件来实现这一点(现在说 mongo)?
意味着每次从前端调用查询或突变时,中间件都应该负责运行日志记录操作。

正在使用的技术栈是-Node、express、graphQl、Redis 等。

任何建议将不胜感激。
谢谢

我想出的解决方案是每次查询或变异时手动调用一个函数。

最佳答案

如果您使用 Apollo,您可以使用 formatResponseformatError日志记录选项,如 docs 中所述.

const server = new ApolloServer({
typeDefs,
resolvers,
formatError: error => {
console.log(error);
return error;
},
formatResponse: response => {
console.log(response);
return response;
},
});

使用扩展可以让你 Hook GraphQL 请求的不同阶段,并允许更细粒度的日志记录。一个简单的例子:
const _ = require('lodash')
const { GraphQLExtension } = require('graphql-extensions')

module.exports = class LoggingExtension extends GraphQLExtension {
requestDidStart(options) {
logger.info('Operation: ' + options.operationName)
}

willSendResponse(o) {
const errors = _.get(o, 'graphqlResponse.errors', [])
for (const error of errors) {
logger.error(error)
}
}
}

还有一个更复杂的例子 here .然后你可以像这样添加你的扩展:
const server = new ApolloServer({
typeDefs,
resolvers,
extensions: [() => new YourExtension()]
});

如果您使用的是 express-graphql为您的端点提供服务,您的选择更加有限。还有一个 formatError选项,但没有 formatResponse .还有一种方法可以传入扩展数组,但 API 与 Apollo 不同。你可以看看 repo了解更多信息。

关于graphql - 将查询/变异操作记录到数据库以进行审计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54934889/

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