Подтвердить что ты не робот

Использование promises - Трассировка стека протоколирования в обработчике сбоя

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

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

В качестве примера, функция обработки запросов:

var Q = require('q');

var requestHandler = function () {
    // Here I get the data etc. that was requested. As this is not important, just a dummy here
    Q.resolve()
        // Now I answer the request
        .then(function (data) {
            // Dummy Code representing the sending of a response
            console.log('sending response …');
            console.log('oh no! an exception');
            // Now an Exception occurs
            throw new Error('You did something wrong!');
        })
        // If there was any error, show the error page instead
        .fail(function (err) {
            // Dummy Code representing the sending of the error page
            console.log('sending error page');
            // Additionally I want to write the error into a log file
            console.error('You had an error: ', err);
        })
        // If there was an error in the .fail-handler, I deserve the server to crash
        .done();
};

// A request comes in, I want to call my handler
requestHandler();

Выход консоли:

sending response …
oh no! an exception
sending error page
You had an error:  [Error: You did something wrong!]

Я не вижу способа доступа к трассировке стека. Но когда я бросаю исключение в обработчик .fail-обработчика (или просто опускаю полный обработчик .fail-обработчика), я получаю трассировку стека на консоли (но мне пришлось перезапустить сервер).

Итак, я думаю, мой вопрос:

Как получить доступ к трассировке стека в обработчике сбоев с обещаниями?

EDIT. Разумеется, любые советы о том, как улучшить объяснение, приветствуются. Если бы я не уточнил, сообщите мне.

4b9b3361

Ответ 1

Запись объекта ошибки не будет печатать трассировку стека ошибок. Вы должны спросить об этом конкретно:

console.error('You had an error: ', err.stack);