2015-07-08 4 views
1

Я использую Winston и Morgan для всех входных протоколов в Sails.js, и мне нужно иметь возможность регистрировать ответы от запросов HTTP-получения. Мне нужно записать их в файл. В настоящий момент мой logFile отображает все HTTP-запросы, но он не отображает ответы. Я искал все варианты для Morgan и Winston и не могу найти способ/вариант для этого. Мне просто интересно, есть ли у кого-нибудь из вас какие-либо советы о том, как это сделать? Спасибо!Как регистрировать ответы JSON HTTP с помощью Winston/Morgan

ответ

4

Вы можете написать функцию промежуточного программного обеспечения для ExpressJS, которая будет регистрировать тело после отправки ответа. Извлекая его от Node http module, чтобы увидеть, как Connect (и, следовательно, Express) управляет телом ответа (который является потоком): вы можете подключиться к двум методам, которые записывают этот поток, чтобы захватить куски, а затем выполнить их/Это. Простое решение и можно сделать более надежным, но оно показывает, что концепция работает.

function bodyLog(req, res, next) { 
    var write = res.write; 
    var end = res.end; 
    var chunks = []; 

    res.write = function newWrite(chunk) { 
    chunks.push(chunk); 

    write.apply(res, arguments); 
    }; 

    res.end = function newEnd(chunk) { 
    if (chunk) { chunks.push(chunk); } 

    end.apply(res, arguments); 
    }; 

    res.once('finish', function logIt() { 
    var body = Buffer.concat(chunks).toString('utf8'); 

    // LOG BODY 
    }); 

    next(); 
} 

А затем установить его перед любыми маршруты назначаются в основном приложении маршрутизатора:

app.use(bodyLog); 
// assign routes 

Я предполагаю, что вы могли бы также использовать это как задание для переменной в Морган, но у меня нет посмотрел, как будет выполняться присвоение переменной async.

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