Создание и запуск HTTP-сервера на Node.js. «Hello, World!» на Node.js

Создание и запуск HTTP-сервера на Node.js. «Hello, World!» на Node.js
5 (100%) 3 votes

В предыдущем уроке мы установили Node.js на Ubuntu. Когда Node.js установлена, самое время написать первое приложение и тестировать систему. В этом уроке мы создадим простой веб-сервер (HTTP-сервер) на Node.js и подробно рассмотрим каждую строку кода. Наш веб-сервер будет вывести приветственное сообщение.

Итак, давайте создадим наш первый файл (start.js) с таким содержанием:

'use strict';

const http = require('http');

http.createServer( function(requset, response){
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end('Hello, World!');
}).listen(8080);

console.log('Server running on 8080');

Приложения нужно запустить с терминала если у Вас операционная система Unix/Linux или с командной строки (cmd) если у Вас Windows. Нужно открыть терминал, перейти ту папку, где Вы сохранили файл start.js и набрать в терминале следующую команду:

node start.js

После этого программа будет запущена и в терминале будет выведена следующая строка: Server running on 8080.

Создание и запуск HTTP-сервера на Node.js

Теперь наш сервер запущен и мы можем обратиться к ней с помощью любого браузера. Сейчас нам нужно открыть браузер и перейти по следующему адресу — http://localhost:8080/. После этого в браузере мы увидим страницу с текстом Hello, World!.

Запуск веб-сервера на Node.js

Чтобы прекратить работу веб-сервера, нужно в терминале нажать на комбинацию клавиш Ctrl+C. Если Вы внесли в коде изменение, то нужно остановить и запустить http-сервер, чтобы изменение учитывались.

HTTP-сервер с нуля — объяснение

А теперь давайте подробно рассмотрим ваш код начиная с первой строки.

Первая строка — это директива ‘use strict’. Node.js поддерживает современный стандарт ECMAScript 6 (ES6 или JavaScript 2015) и мы уже в коде использовали новые возможности ECMAScript 6. Также мы в дальнейшем будем использовать новые возможности нового стандарта. Директива ‘use strict’ переводит код в режим полного соответствия современному стандарту. Без этого наш код не будет работать.

Следующая строка кода выглядит так:

const http = require('http');

Здесь мы загружаем HTTP модуль и присваиваем его http переменной. С помощью HTTP модуля мы можем работать с HTTP протоколом — отправить и принять HTTP запросы.



Практически весь функционал Node.js находится в отдельных модулях (библиотеки). Есть модули, которые уже встроены в ядро Node.js (например, модуль fs — для работы с файловой системой, модуль http, tcp и другие) и есть модули которые можно отдельно установить (например, модуль mongodb — драйвер для работы с базой данных MongoDB). Также мы в дальнейшем создаем свои модули.

Функция require() загружает модули. С помощью функции require() можно загружать любой модуль и мы его в дальнейшем неоднократно будем использовать.

С помощью конструкции const мы объявляем переменную (константа). Конструкция const появилось в новом версии ECMAScript-а — ECMAScript 6.

Следующая строка кода выглядит так:

http.createServer( function(requset, response){ ...

У объекта http есть метод createServer(). С помощью этого метода создается новый сервер. createServer() метод в качестве аргумента получает безымянную функцию. Данная функция является функцией requestListener (приемником запроса) и он принимает два параметра:

  • Request (http.ServerRequest) — запрос от клиента к серверу (серверный запрос).
  • Response (http.ServerResponse) — серверный ответ.

Следующая строка находится в безымянной функции:

response.writeHead(200, {'Content-Type': 'text/html'});

У объекта response есть несколько методов и один из них это метод writeHead(). С помощью этого метода клиенту можно отправлять заголовки ответа (HTTP заголовки) и статус код. В нашем случае мы отправляем статус код 200 и тип контента — HTML. Можно отправлять другие заголовочные информации клиенту кроме типа контента. Например длину контента — content-length.

response.writeHead(200, {
    'Content-Type': 'text/html',
    'Content-Length': 90
});

Следующая строка кода — это еще один метод объекта response.

response.end('Hello, World!');

Метод end() посылает сигнал о завершении передачи данных, то есть о том, что все заголовки и тело ответа были отправлены. Вам нужно всегда использовать метод end() при отправке данных клиенту. Этот метод имеет две необязательные параметры:

  • Первый параметр метода это данные (текст или буфер).
  • Второй параметр — это кодировка текста, если первый параметр был текстом

В нашем случае мы отправляем сигнал о том, что все данные переданы, но кроме сигнала отправляем текст, который клиент принимает как отправляется клиенту как тело HTTP сообщения (body).

Мы так же текст можем отправлять другим методом. У объекта response есть метод write(), с помощью которого можно отправлять любой текст клиенту.

response.write('<h1>Hello, World!</h1>');

После метода createServer() идет еще один метод listen(), который прослушивает входящие подключения к заданному порту.

... }).listen(8080);

В нашем случае наш сервер слушает порт 8080. Метод listen() является асинхронным методом. При обращение к серверу приложение не блокирует выполнение кода в ожидание подключение к порту. Обрабатывается остальная часть кода, который идет за методом listen(). А после подключения к порту автоматически активируется функция обратного вызова.

А в последнем сроке кода мы просто выводим текст в консоль.

console.log('Server running on 8080');

 


Об авторе

Занимаюсь программированием уже более 7 лет. Часто использую JavaScript (Node.js) и Python. Хобби - Квантовая механика и нейронные сети.

3 комментария

Вы можете комментировать эту статью

Комментарии