2012-06-28 2 views
1

Я пытаюсь зарегистрировать только определенные события в файле с помощью функции express.logger (...) с помощью специальной функции, и она висит, когда ответ и запрос не соответствуют критерии, которые я установил.Ошибка регистрации с помощью express.logger в node.js

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... 
    } 
    }); 
) 

return '' in else не работает. Это зависает, я предполагаю, что это не позволяет ответить на финиш/отправку.

Возможно, я должен использовать другой метод для регистрации, но мне нравится простота прямого промежуточного программного обеспечения, поскольку он позволяет мне не включать в себя сообщения журнала повсюду - или я могу обойти это, а также получить слушателя для определенные события ..

Любые идеи о том, что я должен иметь в другом? Или предложения по лучшему методу?

ответ

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

Смежные вопросы