使用 express-bunyan-logger 和 graphql 记录查询字符串

Logging query string with express-bunyan-logger and graphql

我已经 short, self contained example 解决了我在使用 express-bunyan-logger 时遇到的问题。

我正在尝试添加 express-bunyan-logger 作为中间件,并利用 includesFn 将查询字符串和正文记录为自定义字段。

const app = express();

const graphqlLogger = require('express-bunyan-logger')({
  name: 'graphql-logger',
  includesFn: (req, res) => {
    const includes = {};
    if (req.body) includes.req_body = JSON.stringify(req.body);
    if (req.query) includes.req_query = JSON.stringify(req.query);
    return includes;
  },
});

app.use(graphqlLogger);

问题是,即使对于 http://localhost:4000/graphql?query=query%20%7B%0A%20%20books%20%7B%0A%20%20%20%20title%0A%20%20%7D%0A%7D 形式的 URL,req_queryreq_body 字段始终为空。如果我在调试器中检查传递给 includesFnreq 对象,它不包含 req.query 或 req.params.

的任何值

我确定我在这里做错了什么;如何让 includesFn 正确记录查询字符串和正文?

所以,includesFn 被调用了两次,每个请求调用一次。

首先,对于GET请求,那么你只会得到req.query对象而不是空的。

第二个请求是带有 JSON 数据的 POST 请求,所以为了让 req.body 定义而不是空的,你必须执行以下操作:

  1. 运行 npm install body-parser.
  2. 在您的 app.js 文件中包含以下内容:

    const bodyParser = require('body-parser');
    
    ...
    
    app.use(bodyParser.urlencoded({
      extended: true
    }));
    
    app.use(bodyParser.json());