使用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_query
和req_body
领域始终是空的。如果我检查在调试器中传递给includesFn
的req
对象,它不包含req.query或req.params的任何值。
我确定我在这里做错了事;如何让includesFn
正确记录查询字符串和正文?
答
所以,结果是includesFn
被调用两次,每个请求一次。
首先,对于GET
请求,那么只会得到req.query
对象不为空。
第二个请求是POST
请求正在与JSON
数据,所以为了得到req.body
定义,而不是空的,你必须做到以下几点:
- 运行
npm install body-parser
。 -
包括在
app.js
文件中的以下内容:const bodyParser = require('body-parser'); ... app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());