Как использовать обратный вызов обработчика ошибок в политике Sails.js?

Задав этот вопрос, я обнаружил, что могу добавить массив обратных вызовов к конечной точке в приложении sails, например:

файл: /api/policies/somepolicy.js

module.exports = thisIsAnArrayOfCallbacks;

Это работает нормально, пока каждый член thisIsAnArrayOfCallbacks это function который принимает req, res, а также next в качестве аргументов. Вызов контроллера выполняет все функции в массиве, и ожидаемый результат получается в нормальном потоке.

Но при использовании errorHandler обратный вызов (как в этом примере), который требует дополнительного err параметр, он не работает должным образом: версия только для экспресс app.get('/path', thisIsAnArrayOfCallbacks) позволяет errorHandler чтобы получить исключение и сообщить правильный ответ клиенту, но при использовании способа паруса, errorHandler функция не вызывается, и в ответ выдается исключение.

Как я мог получить err параметр или поймать исключение произошло в одной из функций thisIsAnArrayOfCallbacks отправить правильный ответ (предпочтительный) клиенту?

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

1 ответ

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

Если вы действительно хотите реализовать универсальный обработчик ошибок в Sails, у вас есть два варианта: либо переопределить стандартный обработчик 500 (в Sails v0.10 это /api/responses/serverErrorв v0.9.x это config/500.js) или (в версии 0.10) создайте пользовательское промежуточное ПО Express и загрузите его, используя sails.config.express.loadMiddleware, Посмотрите этот вопрос SO для получения подробной информации о втором варианте и не забудьте добавить свой собственный обработчик ошибок после маршрутизатора и до (или вместо) обработчика 500.

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