2013-07-25 4 views
1

Я создаю веб-приложение узла (используя Express) и чтобы все было как можно сухим, я автоматически получаю соединение с базой данных для каждого запроса, но мне также нужно его отпустить (обратно в пул).Захват события ответа HTTP

Я мог бы сделать это вручную в каждом маршруте, но это будет просто загрязнение кода. Я подумал, что я должен слушать события сервера и выпускать его после того, как ответ завершен или отправлен. Какие у меня варианты? Какие события (и внутри которого объект (приложение, запрос или любой другой) срабатывает, когда реакция завершена?

ответ

4

res наследуется от EventEmitter, и может использовать события по умолчанию, а также вы можете излучать собственные.
Так один из наиболее распространенным будет finish (в node.0.8.12 и старше end) событие:.

res.on('finish', function() { 
    // request processing finished 
}); 

вы можете прикрепить это событие для всех запросов, если вы хотите, или к конкретным в начале своих корней
Кроме того, вы может создать промежуточное ПО, которое получит соединение с БД, и прикрепит finish события и, возможно, таймауты. И тогда все, что вам нужно, это добавить это промежуточное ПО в маршруты, поэтому минимальное количество повторяющихся кодов.

В то же время я бы порекомендовал вам не создавать соединение БД для каждого запроса, так как это большие накладные расходы и ненужное использование сокетов, а также обработчики ввода-вывода. Вы можете свободно использовать onse одно соединение, и оно будет столь же эффективным с точки зрения производительности.

+0

+1 для указания того, что не может потребоваться создание соединения БД для каждого запроса. Это нечто отличное от других серверных сред, главным образом потому, что Node.js использует один поток. –

+0

Одиночная нить + вы можете просто получить доступ к переменным и вне области запроса. У вас может быть массив даже общих данных или что-то подобное. Хотя, например, в PHP каждый поток - полностью изолирован друг от друга - sux. – moka

+0

Очень круто не знал, что это событие существует – Plato

Смежные вопросы