21Sep

nodejs-2560x1440-950x534
В дальнейшем мы будем часто обращаться  к модулю http, поэтому сейчас небольшая экскурсия по его документации, что в ней есть и где это искать.
Сейчас модуль http совмещает в себе два функционала. Первый – это функционал сервера. http.createServer создает новый объект класса  Server. Если передан обработчик, то он ставится на событие request. Второй функционал – это createClient.
Этот метод устарел, есть немножко другой: http.request. Общий смысл такой, что он предназначен для создания httpзапросов. При помощи этого метода Node.js может обратиться к другому сайту или серверу. Сам по себе класс http.Server используется мало. Создается объект, вешается обработчик на событие request. Запрос пришел, и при помощи listen сервером назначается определенный port, host.

Далее при получении запроса происходит событие request, и контроль приходит к функции обработчику. Она получает два аргумента. Первый requestобъект запроса, входящие данные. Второй – Response – объект ответа.

Давайте начнем с объекта запроса. Сейчас я посмотрю, где он в документации. Тут есть некоторые трудные для понимания места, возможно, в будущем, при переписывании модуля, они будут устранены. ClientRequestэто вовсе не объект запроса, о котором сейчас идет речь. Это объект запроса, если мы используем httplient, то есть, если мы при помощи Node.js генерируем этот запрос. А если мы этот функционал не используем, то ClientRequest вообще не причем. Нас интересует IncomingMessage. Именно он – это первый параметр функции обработчика запроса, он получает url, method, headers и некоторые другие свойства.
Хотел бы обратить ваше внимание на то, что здесь находятся не все свойства объекта запроса, потому что IncomingMessage  наследует другому классу, который представляет собой так называемый поток. Эти потоки мы в ближайшем будущем обсудим. Поэтому и событие event тоже не единственное. Есть еще, мы перейдем к ним позже.

Обычный цикл работы сервера состоит из того, что мы узнаем, что именно к нам пришло. А дальше отвечаем, осуществляя запись в объект  ServerResponseвторой параметр обработчика запроса request. Если есть желание, мы можем поставить свои заголовки. Это делается либо вызовом writeHead, который отправляет их в ответ тут же, либо неявным образом. Неявный означает, в данном случае, что тут же они отправлены не будут, а подождут первой записи. Во многих случаях никакие особые заголовки не требуются. Можно сразу написать ответ, если это веб-страница, то ответ можно записать вызовом response.end и в первом параметре указать текст страницы. Также для записи в ответ есть метод  response.write. В отличие от response.end он не закрывает соединение. Поэтому response.write используют в тех случаях, когда мы хотим много-много раз что-то писать в ответ, например, потому что появляются новые данные. В этом случае, для того, чтобы окончить ответ, используется end. Соединение будет висеть до того, пока end не будет вызван или пока его клиент не закроет, либо произойдет какая-то ошибка.

У объекта ответа есть и другие свойства события, которые здесь не упомянуты, потому что эта документация посвящена   ServerResponse. А он является наследником другого класса, который в дальнейшем мы тоже изучим. Но на текущий момент мы уже знаем достаточно, чтобы получить запрос и отослать нормальный ответ в браузер.
7ae59af52cfc42fa9d851753e4509bd0

Материалы урока взяты из следующего скринкаста.

We are looking forward to meeting you on our website soshace.com

9. Уроки Node.js. События, EventEmitter и Утечки Памяти

Следующий объект, который нас интересует, это EventEmitter или, как его иногда называют, ЕЕ. EventEmitter представляет собой основной объект, реализующий работу с событиями в Node.js. Большое количество других встроенных объектов, которые генерируют события, ему наследуют. Для того чтобы воспользоваться EventEmitter достаточно подключить модуль “events”встроенный и взять с него соответствующее свойство (создадим ee.js) :

var EventEmitter = require(‘events’).EventEmitter;

Leave a Reply