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