Сервер в Node.js

Создание сервера в Node.js

Для работы с сервером и протоколом http в Node.js используется модуль http, подключаемый с помощью require() или import:

Чтобы создать сервер (объект <http.Server>), следует вызвать метод http.createServer([options][, requestListener]), где

  • options <Object>:
    1. IncomingMessage <http.IncomingMessage> (по умолчанию IncomingMessage) - задает класс IncomingMessage, который можно использовать для доступа к статусу ответа, заголовкам и данным;
    2. ServerResponse <http.ServerResponse> - указывает используемый класс ServerResponse, полезно для расширения оригинального ServerResponse (по умолчанию: ServerResponse);
    3. insecureHTTPParser <boolean> (по умолчанию: false) - если TRUE, то использовать небезопасный анализатор HTTP, который принимает недопустимые заголовки HTTP (следует избегать использования небезопасного парсера);
    4. maxHeaderSize <number> - опционально переопределяет значение --max-http-header-size для запросов, полученных этим сервером, т.е. максимальную длину заголовков запроса в байтах (по умолчанию: 16384 (16 КБ);
    5. noDelay <boolean> (по умолчанию: false) - если TRUE, он отключает использование алгоритма Нэгла сразу после получения нового входящего соединения;
    6. keepAlive <boolean> (по умолчанию: false) - если TRUE, активируется функция поддержания активности на сокете сразу после получения нового входящего соединения, аналогично тому, что делается в [socket.setKeepAlive([enable][, initialDelay])][socket. setKeepAlive (включить, InitialDelay)];
    7. keepAliveInitialDelay <number> (по умолчанию: 0) - если положительное число, задается начальная задержка перед отправкой первой проверки активности на незанятый сокет. 
  • requestListener - функция, которая автоматически добавляется к событию request.

Метод response.end([data[, encoding]][, callback]) должен вызываться для каждого ответа: он сообщает серверу, что все заголовки и тело ответа отправлены и сервер должен считать сообщение полным. 

Чтобы сервер мог прослушивать и обрабатывать входящие подключения, у объекта сервера необходимо вызвать метод listen(), в который в качестве параметра передается номер порта, по которому запускается сервер, например:

где

  • request - параметр, в который передается информация о запросе;
  • response - параметр, который управляет отправкой ответа.

Параметр Request

Параметр request позволяет получить информацию о запросе и представляет объект http.IncomingMessage (расширяющий класс stream.Readable), и имеющий такие свойства как:

  • headers - заголовки запроса;
  • method - тип запроса (GET, POST, DELETE, PUT);
  • url - запрошенный адрес.

За счет расширения класса stream.Readable для request доступно, например, событие data (генерируется всякий раз, когда поток передает часть данных -chank) или событие end (генерируется, когда в потоке заканчиваются передаваемые данные).

Например:

Если обратиться в браузере по адресу http://localhost:3000/index.html, то в консоли терминала увидим строку "/index.html".

Параметр Response

Параметр response управляет отправкой ответа и представляет объект <http.ServerResponse>. Среди его функциональности можно выделить следующие методы:

  • statusCode  (number, по умолчанию "200") - устанавливает код ответа (например, 200 или 404);
  • statusMessage - устанавливает сообщение, отправляемое вместе со статусным кодом (например, "Not found");
  • setHeader(name, value) - добавляет в ответ один заголовок;
  • write - пишет в поток ответа (отправляет) часть тела ответа; этот метод может вызываться несколько раз для предоставления последовательных частей тела;
  • writeHead - добавляет в ответ статусный код, статусное сообщение и набор заголовков;
  • end - должен вызываться для каждого ответа: он сообщает серверу, что все заголовки и тело ответа подготовлены и сервер должен считать сообщение полным.

Например:

Отправка ответа в Node.js

Если предстоит отправить довольно большой ответ, то мы можем несколько раз вызвать метод write(), который пишет в поток ответа (отправляет) часть тела ответа, последовательно оправляя в исходящий поток каждый кусочек информации. Например, отправим код веб-страницы:

Маршрутизация в Node.js

По умолчанию Node.js не имеет встроенной системы маршрутизации, поэтому обычно она реализуется с помощью специальных фреймворков (например, Express). Однако если необходимо разграничить простейшую обработку пары-тройки маршрутов, то вполне можно использовать для этого свойство url объекта Request. Например:

Переадресация в Node.js

Переадресация предполагает отправку статусного кода 301 (постоянная переадресация) или 302 (временная переадресация) и заголовка Location, который указывает на новый адрес.

Например, выполним переадресацию с адреса localhost:3000/ на адрес localhost:3000/newpage (пример отсюда):

 

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.