【问题标题】:Log all GraphQL responses with express使用 express 记录所有 GraphQL 响应
【发布时间】:2017-04-29 18:36:50
【问题描述】:

我设法设置日志记录 graphQL 错误:

app.use('/graphql', graphqlHTTP(request => {
  return {
    schema,
    rootValue: {
      request
    },
    formatError: error => {
      const params = {
        message  : error.message,
        locations: error.locations,
        stack    : error.stack
      };
      winston.error(`message: "${error.message}", QUERY: "${request.body.query}"`);
      // Optional ${request.body.operationName} ${request.body.variables}
      return (params);
    }
  }
}));

如何设置一个通用函数,即使没有错误也可以访问请求和响应?

编辑:我已设法通过以下方式记录所有请求:

function loggingMiddleware(req, res, next) {
  if (req.url.startsWith('/graphql')) {
    winston.debug('REQUEST: ', req.body);
  }
  next();
}
app.use(loggingMiddleware);

在我打电话给app.use('/graphql') 之前,但仍然不知道如何运行“post graphql 处理”处理程序来记录响应。

【问题讨论】:

  • 感谢您发布有关您如何管理日志记录的信息。我发现req.body 在当前版本的express-graphql 中未定义(0.9.0)。

标签: javascript node.js express graphql


【解决方案1】:

您可以在express中代理req.send()函数。

app.use(function (req, res, next) {
    let originalSend = res.send;
    res.send = function (data) {
        console.log(data);
        originalSend.apply(res, Array.from(arguments));
    }
    next();
})

这只是为了向您展示如何实现这样的目标。

我看到你使用winston,所以我建议你使用express-winston

另外,请检查this

【讨论】:

    【解决方案2】:

    我正在使用这个包来实现你想要的: https://github.com/withspectrum/graphql-log

    我还使用了debug,并添加了一个日期作为日志的前缀,这是一个示例代码:

    if (process.env.NODE_ENV === 'development') {
        const createGraphQLLogger = require('graphql-log');
        const debug = require('debug')('server:resolvers');
        debug.enabled = true;
        const logExecutions = createGraphQLLogger({
            prefix: new Date(),
            logger: debug
        })
        logExecutions(resolvers);
    }
    

    【讨论】:

      【解决方案3】:

      这很简单。 express-graphql 提供了一种extensions 机制,它直接为您提供result 作为参数之一。

      app.use('/graphql', graphQLHTTP(request => {
        return {
          schema: ...,
          extensions({
            result,
          }) {
            console.log(result.data);
          },
        };
      }));
      

      【讨论】:

        猜你喜欢
        • 2019-03-26
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 2017-06-25
        • 1970-01-01
        • 2017-06-27
        相关资源
        最近更新 更多