Как лучше всего обрабатывать API-интерфейсы веб-перехватчиков в Hapi.js?

Обычная практика API в стиле веб-перехватчика заключается в том, что потребитель API получает запрос веб-перехватчика, отвечает 204 No Content, закрывает соединение и затем обрабатывает запрос. Hapi.js не отправляет объект ответа до nextTick, что означает, что функция обработчика должна вернуться.

Выделение обработки запроса в отдельную функцию и вызов ее с помощью nextTick по-прежнему приводит к тому, что обработка происходит до отправки объекта ответа. setTimeout работает, но это отрицательно сказывается на производительности.

Расширения запросов Hapi казались опцией, но они присоединяются ко всем запросам, независимо от пути, что добавляет ненужные накладные расходы другим запросам.

Express.js имеет метод response.send(), который немедленно отправляет ответ. В идеале у Хапи должно быть что-то подобное.


person JeremiahLee    schedule 10.04.2015    source источник
comment
Вы нашли ответ на это? Имеет ли значение, что веб-перехватчик не получает ответа как можно скорее?   -  person Woody    schedule 30.06.2015
comment
Нет, я не нашел решения. Да, очень важно, чтобы запрос веб-перехватчика получил ответ и правильно закрыл соединение, прежде чем мое приложение продолжит работу.   -  person JeremiahLee    schedule 03.07.2015


Ответы (1)


Решение состоит в том, чтобы использовать setImmediate для любой обработки, которая должна произойти после отправки ответа и закрытия соединения. Хапи отправляет reply на nextTick. setImmediate событий будут обработаны после nextTick событий.

См. пример: https://gist.github.com/jeremiahlee/3689e8b4d1513c375b1e

person JeremiahLee    schedule 18.10.2015