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

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

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

module.exports = thisIsAnArrayOfCallbacks;

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

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

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

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


person jpgc    schedule 04.03.2014    source источник


Ответы (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), либо (в v0 .10) создайте собственное промежуточное ПО Express и загрузите его с помощью sails.config.express.loadMiddleware. Подробнее о второй вариант, и не забудьте добавить собственный обработчик ошибок после маршрутизатора и перед (или вместо) обработчика 500.

person sgress454    schedule 04.03.2014