Работа с HTTP
Цель
Разобраться в основных возможностях модуля 'http', создать простой сервер.
Предварительныетребования
Знание основ JavaScript.
Базовые знания о HTTP
Установить Node.js и npm
Умение работать с модулями Node.js
Ход урока
Для использования HTTP-сервера и клиента в Node.js необходимо подключить модуль 'http' (require('http')
).
Интерфейсы HTTP в Node.js предназначены для поддержки многих функций протокола. Параметры запроса и ответа являются потоками.
Чтобы создать сервер, следует вызвать метод http.createServer([requestListener]). Метод createServer()
возвращает объект http.Server
. Но чтобы сервер мог прослушивать и обрабатывать входящие подключения, у объекта сервера необходимо вызвать метод server.listen()
, в который в качестве параметра передается номер порта, по которому запускается сервер.
Пример использования:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
http.createServer().listen(port, hostname);
Работать с полученными с сервера данными можно несколькими способами.
Первый способ - это обработка события 'request'. Это событие срабатывает каждый раз, как происходит запрос.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3002;
const server = http.createServer();
server.on('request', (req, res) => {
res.end('Hello world');
})
server.listen(port, hostname);
Функция его обработки принимает два параметра:
- request: хранит информацию о запросе
- response: управляет отправкой ответа
Взамен обработки этого события, вы можете просто включить такую же самую функцию обработки в качестве параметра метода http.createServer([requestListener]).
const hostname = '127.0.0.1';
const port = 3002;
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('okay');
});
server.listen(port, hostname);
requestListener - это функция, которая автоматически добавляется к событию 'request'.
request
Параметр request позволяет получить информацию о запросе и представляет объект http.IncomingMessage. Отметим некоторые основные свойства этого объекта:
- headers - Пара ключей-значений имен и значений заголовков. Названия заголовков приходят в нижнем регистре.
- method - Метод запроса как строка. Пример: «GET», «DELETE».
- url - URL-адрес запроса. Содержит только URL-адрес, который присутствует в фактическом HTTP-запросе.
response
Параметр response управляет отправкой ответа и представляет объект http.ServerResponse. Среди его функциональности можно выделить следующие методы:
end([data][, encoding][, callback]) - Этот метод сигнализирует серверу о том, что все заголовки ответа и тело отправлены и сервер должен понять что ответ завершен. Метод, response.end (), обязательно должен быть вызван для каждого ответа. При этом в метод мы можем передавать данные, которые будут добавляться к телу ответа
statusCode - Устанавливает статусный код ответа
statusMessage - Устанавливает сообщение, отправляемое вместе со статусным кодом
write(chunk[, encoding][, callback]) - Посылает часть тела ответа. Этот метод можно вызвать несколько раз, чтобы обеспечить последовательный вывод частей. Если этот метод вызван, то writeHead уже вызван не будет.
setHeader(name, value) - Устанавливает одно значение заголовка для неявных заголовков. Если этот заголовок уже существует в заголовках, подлежащих отправке, его значение будет заменено.
writeHead(statusCode[, statusMessage][, headers]) - Отправляет ответный заголовок в запрос.
statusCode
представляет собой трехзначный код состояния HTTP, например 404. Последний аргумент,headers
, является заголовками ответов. При желании в качестве второго аргумента можно записать человеко читаемыйstatusMessage
.
Практическое задание
Дополните задание с главы Работа с модулями в Node.js следующим образом:
- создайте сервер, который будет слушать 3005 порт
- из url запроса необходимо получать имя и возраст пользователя и выводить информацию о пользователе на экран
- проверьте на url
127.0.0.1:3005?name=Vasya&age=20
Глоссарий
Термин | Значение |
---|---|
Поток данных | Абстракция, используемая для чтения или записи файлов, сокетов и т. п. в единой манере. |
Интерфейс | Общая граница между двумя функциональными объектами, требования к которой определяются стандартом; совокупность средств, методов и правил взаимодействия (управления, контроля и т.д.) между элементами системы. |
Заголовок ответа | Список поддерживаемых методов всего сервера или конкретного ресурса. |
Тело ответа | Данные, которые отправляются на клиенскую часть |
Сервер (Веб-сервер) | Это сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, как правило, вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными. |