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

问题描述:

我对使用express-bunyan-logger的问题做了short, self contained example使用express-bunyan-logger和graphql记录查询字符串

我试图添加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对象不为空。

第二个请求是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());