2012-06-28 3 views
1

express.logger (...)를 통해 특정 이벤트 만 파일에 기록하려고하는데 사용자 정의 기능을 사용하면 응답 및 요청이 기준을 설정했습니다.node.js에 express.logger로 로깅 할 때 오류가 발생했습니다.

var express = require('express'), 
app = express.createServer(
    express.logger(function(req, res) { 
    var status = res.statusCode, 
    color = 32; 

    if (status >= 500) color = 31; 
    else if (status >= 400) color = 33; 
    else if (status >= 300) color = 36; 

    if (req.method==='POST' && req.originalUrl!=='/plankton') { 
    return '\033[90m' + req.method 
    + ' ' + req.originalUrl + ' ' 
    + '\033[' + color + 'm' + res.statusCode 
    + ' \033[90m' 
    + (new Date - req._startTime) 
    + 'ms\033[0m'; 
    } 
    else if (res.statusCode>=400) { 
    return '\033[90m' + req.method 
    + ' ' + req.originalUrl + ' ' 
    + ' ' + req.body + ' ' 
    + '\033[' + color + 'm' + res.statusCode 
    + ' \033[90m' 
    + (new Date - req._startTime) 
    + 'ms\033[0m'; 
    } else { 
// what should be inserted here? 
// I only want to log the above events... 
    } 
    }); 
) 

'그 밖의 다른 곳에서는'반환하지 않습니다. 내 생각 엔 응답이 끝나거나 보내지 못하게하는 것입니다.

아마도 다른 방법으로 로그를 작성해야하지만, 익스프레스 미들웨어의 단순성은 모든 곳에서 로그 메시지를 포함 할 필요가 없기 때문에 가능합니다. 또는 주변에서 로그 메시지를 포함 할 필요가 없기 때문에 가능합니다. 특정 이벤트 ..

내가 다른 사람에게 가져야 할 것에 대한 아이디어가 있습니까? 또는 더 나은 방법에 대한 제안?

답변

1

미들웨어 API는 동기 리턴 값이 아닌 비동기 콜백을 기반으로한다는 점을 알아야합니다. 미들웨어 함수의 반환 값은 완전히 무시됩니다. 이 곰팡이를 따라야합니다 :

function (req, res, next) { 
    //look at req 
    //do whatever logging you decide you want to do 
    //Tell express that you are done and it can move along the middleware chain 
    next(); 
} 
+0

감사합니다. 나는 비공식적 인 세계에 꽤 새로운 사람입니다. – Jacob

관련 문제