2017-04-26 1 views
1

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 필드는 항상 비어 있습니다. 디버거에서 includesFn으로 전달 된 req 개체를 검사하면 req.query 또는 req.params에 대한 값이 포함되지 않습니다.

나는 여기서 뭔가 잘못하고 있다고 확신합니다. includesFn에 쿼리 문자열과 본문을 올바르게 기록하려면 어떻게합니까?

답변

1

따라서 includesFn은 각 요청마다 두 번 호출됩니다.

먼저 GET 요청의 경우 req.query 개체 만 비어있게됩니다.

  1. 실행 npm install body-parser 다음 req.body 정의하고 비어 있지 얻을에 위해 있도록

    두 번째 요청, JSON 데이터되고있는 POST 요청, 당신은 다음을 수행해야합니다.

    const bodyParser = require('body-parser'); 
    
    ... 
    
    app.use(bodyParser.urlencoded({ 
        extended: true 
    })); 
    
    app.use(bodyParser.json()); 
    
:
  • 은 당신의 app.js 파일에 다음을 포함

  • 관련 문제