He creado un ejemplo breve e independiente de un problema que tengo con express-bunyan-logger.
Estoy tratando de agregar express-bunyan-logger como middleware, y utilizo includesFn para registrar la cadena de consulta y el cuerpo como campos personalizados.
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); El problema es que, incluso para una URL de la forma http://localhost:4000/graphql?query=query%20%7B%0A%20%20books%20%7B%0A%20%20%20%20title%0A% 20%20%7D%0A%7D , los campos req_query y req_body siempre están vacíos. Si inspecciono el objeto req que se pasa a includesFn en un depurador, no contiene ningún valor para req.query o req.params.
Estoy seguro de que estoy haciendo algo mal aquí; ¿Cómo obtengo que includesFn registre correctamente la cadena de consulta y el cuerpo?
Entonces, resulta que includesFn se llama dos veces, una vez por cada solicitud.
Primero, para la solicitud GET , obtendrá solo el objeto req.query no vacío.
La segunda solicitud es la solicitud POST que está siendo con datos JSON , por lo que para obtener el req.body definido y no vacío, debe hacer lo siguiente:
npm install body-parser . incluya lo siguiente en su archivo app.js :
const bodyParser = require('body-parser'); ... app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());