Как вы ловите все ошибки в SailsJS

Я новичок в Node and Sails и уже пару недель бьюсь над этой проблемой. Мне нужно записать (в конечном итоге в файл или базу данных) все ошибки, которые происходят в нашем приложении Sails. Я нашел пару ответов, которые близки к решению этой проблемы, но ни один из них не работает на 100%. У меня есть настройки, основанные на ответе на этот вопрос

При использовании Sails v0.9.16 я настраиваю логирование в файле config/500.js, но при использовании тестового кода...

t.t;

... в моем контроллере Sails просто печатает "ReferenceError: t не определено". Это никогда не идет к 500.js. В Sails v0.10.0-rc5 тот же тестовый код попадет в мое пользовательское промежуточное ПО 500 (показано ниже).

Проблема в Sails v0.10.0-rc5. Похоже, что промежуточное программное обеспечение маршрутизатор обрабатывает сообщение об ошибке 400, прежде чем попасть в мое пользовательское промежуточное программное обеспечение 400.

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

Так как я могу получить все ошибки, которые случаются? Если я на правильном пути, что мне не хватает, чтобы заставить это работать?

Заранее спасибо!

Не так много кода, чтобы показать для v0.9.16... Я не думаю, что я изменил ничего, кроме добавления sails.log в файл 500.js...

Ниже приведена пользовательская промежуточная установка для v0.10.0-rc5 ...

    loadMiddleware: function(app, defaultMiddleware, sails) {

    // Use the middleware in the correct order
        app.use(defaultMiddleware.startRequestTimer);
        app.use(defaultMiddleware.cookieParser);
        app.use(defaultMiddleware.session);
        app.use(defaultMiddleware.bodyParser);
        app.use(defaultMiddleware.handleBodyParserError);
        app.use(defaultMiddleware.methodOverride);
        app.use(defaultMiddleware.poweredBy);

        app.use(defaultMiddleware.router); //400s do not make it past this...
        app.use(defaultMiddleware.www);
        app.use(defaultMiddleware.favicon);

        app.use(function(req, res, next ) {
            sails.log("400 error caught in middleware - " + err.stack);         
            next();
        });

        app.use(function(err, req, res, next){
            sails.log("500 error caught in middleware - " + err.stack);
            next(err);
        });
}

1 ответ

Решение

В Sails v0.10 у вас есть пользовательские ответы для обработки ошибок, поэтому вам не нужно предоставлять специальное промежуточное программное обеспечение, как в вашем примере. По умолчанию большинство ошибок (то есть тех, которые специально не вызваны res.forbidden(), res.notFound() или другой обработчик) будет обслуживаться serverError ответ, который живет в api/responses/serverError.js, Вы можете настроить это, чтобы сделать все что угодно.

Если вы обновили приложение v0.9 до v0.10, у вас может не быть api/responses папка. Нет проблем; просто используйте sails new whatever в пустой каталог, чтобы создать новый проект v0.10 и скопировать api/responses папка из нового проекта в ваш старый!

Другие вопросы по тегам