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

15. Уроки Node.js. Асинхронная разработка. Введение.

В реальной жизни очень редко бывает так, что, получив запрос, сервер может тут же на него ответить. Обычно для того, чтобы ответить, серверу нужны какие-то данные. Эти данные он получает либо из базы, либо из какого-то другого источника, например, из файловой системы. В этом примере, используя модуль fs при получении запроса на url ‘/’, считывается файл index.html и выводится посетителю.

Leave a Reply