使用express记录所有GraphQL响应

era*_*ran 6 javascript node.js express graphql

我成功地设置了记录 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);
    }
  }
}));
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Aᴍɪ*_*ᴍɪʀ 6

您可以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();
})
Run Code Online (Sandbox Code Playgroud)

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

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

另外,请检查一下