Как вы ловите все ошибки в 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
папка из нового проекта в ваш старый!