【问题标题】:Logging query string with express-bunyan-logger and graphql使用 express-bunyan-logger 和 graphql 记录查询字符串
【发布时间】:2017-09-23 04:45:02
【问题描述】:

我已经针对 express-bunyan-logger 遇到的问题提出了short, self contained example

我正在尝试将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 正确记录查询字符串和正文?

【问题讨论】:

    标签: express graphql-js bunyan


    【解决方案1】:

    所以,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());
      

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2018-12-30
      • 2017-09-25
      • 2019-07-14
      • 2018-06-18
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多