如何输入所有graphQL响应以登录NodeJS

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我设法通过以下方式在graphQL上设置日志记录错误:

app.use('/graphql', graphqlHTTP(request => {
  return {
    schema,
    rootValue  : {
      request
    },
    graphiql   : true,
    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.indexOf('graphql') !== -1) {
  winston.debug('REQUEST: ', req.body);
  }
  next();
}
app.use(loggingMiddleware);

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

提问于
用户回答回答于

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

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

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);
}
用户回答回答于

您可以req.send()在express中代理该功能。

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

此外,检查出。

扫码关注云+社区

领取腾讯云代金券