2016-07-10 6 views
0

가 내가 보낸 후 응답을 감사 싶습니다 명시 적 사용하고 보내 그것을익스프레스 응답 본문 후

var app = express(); 
app.use(audit.auditRequest); // working fine 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
app.use(expressValidator({ 
customValidators: validations.customValidators, 
customSanitizers: sanitizers.customSanitizers 
})); 
app.use(auth.authenticate); 
app.use('/myPath', myPathHandler); 
app.use(errorHandler.handleErrors); 
**app.use(audit.auditResponse);** 

의 ErrorHandler 예를 들어, 다음과 같습니다

... 
res.status(500).send({ message : "abc", code: 5010, description : "def" }); 
next(); // call audit middleware 

하고 감사 미들웨어 다음과 같이 표시됩니다.

...  
auditModule.auditResponse = function auditResponse(req, res, next) { 
     auditLogger.info('Response', res.body); 
     // but res.body is undefined 
}; 
... 

이유가 무엇입니까?

+0

당신은'req.body'을 원하셨습니까? – Iceman

+0

아니요, 사용자에게 보내는 응답을 기록해야합니다. –

+0

여기에 전체 코드를 입력하십시오. – Iceman

답변

1

응답 본문은 응답 할 때 속성만큼 쉽게 사용할 수 없다는 것을 알고 있습니다.

그래서 : res.body은 작동하지 않습니다. 그래서, 해결 방법이 있습니다. 우리는 응답 쓰기에서 데이터를 수집하여 누적하여 res.body에 수동으로 추가 할 수 있습니다. 이것을 작동시키기 위해 미들웨어로 삽입하십시오. Pls는 어떤 .compress()보다 먼저 주사해야합니다.

를 주입 미들웨어 (이 직접 Node.js를에서 작동합니다 ES6 &에 있지만, 당신이 원한다면 내가 ES5에 대한 답 변경할 수 있습니다)와 같은 : 후

server.use((req, res, next) => { 
    const original_write = res.write, 
     original_end = res.end, 
     chunks = []; 
    res.write = function(chunk) { 
     chunks.push(chunk); 
     original_write.apply(res, arguments); 
    }; 
    res.end = function(chunk) { 
     if (chunk) 
      chunks.push(chunk); 
     res.body = Buffer.concat(chunks).toString('utf8'); 
     original_end.apply(res, arguments); 
    }; 
    next(); 
}); 

지금 당신이 행복하게 res.body을 사용할 수 있습니다 당신의 당신은 응답을 보냅니다. : D

참고 : res.body은 utf8로 인코딩 된 문자열입니다. 객체라면 json으로 다시 파싱합니다.

+0

이것을 시험해 보겠습니다! 또한 res 객체에 속성을 추가하라는 제안을 발견했습니다. res.bodyForAudit = bodyToSend 그리고 미들웨어에 도달하면이를 읽습니다. 어떻게 생각해? –

+0

할 수 있지만 위와 같은 방법으로 읽어야합니다. 더 일반적인 솔루션을 작성한 이유는 다른 사람이 다른 용도로 사용할 수 있도록하기 위해서입니다. – Iceman

-2

res.body 대신 req.body을 시도하십시오.

+0

편집을 참조하십시오. 보낸 후 응답 본문을 읽고 싶습니다. –