2

我做了一个简短的、独立的例子来说明我在 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% 形式的 URL 20%20%7D%0A%7Dreq_queryreq_body字段始终为空。如果我检查在调试器中req传递给的对象includesFn,它不包含 req.query 或 req.params 的任何值。

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

4

1 回答 1

2

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

首先,对于GET请求,您将只得到req.query不为空的对象。

第二个请求是POST带有JSON数据的请求,因此为了获得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());
    
于 2017-04-28T19:39:38.470 回答