В моей последней статье я представил самую простую из возможных программ Node.js. Хотя программы Hello World хороши, Node.js более известен тем, что он создает хорошо масштабируемые серверные приложения. В этой статье представлен простой HTTP-сервер, созданный поверх Node.js.
Запуск сервера
Начните с создания нового файла с именем «web_server.js». Вставьте следующий код в файл и сохраните его.
var http = require("http");
var server = http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/html"});
response.write("<!DOCTYPE "html">");
response.write("<html>");
response.write("<head>");
response.write("<title>Hello World Page</title>");
response.write("</head>");
response.write("<body>");
response.write("Hello World!");
response.write("</body>");
response.write("</html>");
response.end();
});
server.listen(80);
console.log("Server is listening");
Чтобы запустить сервер, введите команду, показанную ниже. Если все работает правильно, вы увидите сообщение о том, что сервер прослушивает. Обратите внимание, что пример сервера пытается привязать порт 80, стандартный порт HTTP. Если этот порт уже используется или ограничен на вашем компьютере, вы увидите ошибку.
узел web_server.js
Следующим шагом является подключение к серверу с помощью веб-браузера. Запустите выбранный браузер и направьте его по одной из следующих ссылок. В сетевых терминах localhost
Ваш браузер должен сказать «Hello World!».
HTTP: // локальный http://127.0.0.1
Как работает сервер
Теперь, когда сервер запущен, пришло время проанализировать код. Первое, на что нужно обратить внимание, это вызов require()
Программы Node.js могут загружать отдельные модули с помощью метода require()
Хотя многие модули должны быть загружены, некоторые модули, такие как http
В строке 2 сервер HTTP создается с помощью метода http
createServer()
Как и большинство функций Node.js, createServer()
Эта функция обратного вызова выполняется каждый раз, когда сервер получает новый запрос.
Функция обратного вызова принимает два аргумента, request
response
Объект request
Точно так же объект response
Функция обратного вызова начинается с вызова метода response.writeHead()
Этот метод отправляет клиенту код состояния HTTP и коллекцию заголовков ответов . Код состояния используется для указания результата запроса. Например, все ранее сталкивались с ошибкой 404, указывающей, что страница не может быть найдена. Сервер-пример возвращает код 200, который указывает на успех.
Наряду с кодом состояния сервер возвращает несколько заголовков HTTP, которые определяют параметры ответа. Если вы не укажете заголовки, Node.js неявно отправит их вам. Пример сервера указывает только заголовок Content-Type
Этот конкретный заголовок определяет MIME-тип ответа. В случае ответа HTML тип MIME — «text / html».
Далее сервер выполняет несколько вызовов response.write()
Эти вызовы используются для написания HTML-страницы. По умолчанию используется кодировка символов UTF-8. Технически все эти вызовы могут быть объединены в один вызов для повышения производительности. Однако для такого тривиального примера производительность была принесена в жертву ради читабельности кода.
После написания HTML-страницы вызывается метод response.end()
Вызывая этот метод, мы сообщаем серверу, что заголовки и тело ответа были отправлены и что запрос был выполнен. Пример сервера вызывает end()
Однако end()
write()
Вызов listen()
Компьютеры имеют тысячи портов, которые действуют как конечные точки связи. Чтобы подключиться к серверу, клиенты должны точно знать, какой порт прослушивает сервер. Порты идентифицируются по номерам портов, а HTTP-серверы обычно прослушивают порт 80.
Вывод
В этой статье представлен очень простой HTTP-сервер. В своем текущем состоянии сервер может вернуть только одну HTML-страницу. В ближайшие недели мы углубимся в мир Node.js, исследуя дополнительные функции, такие как чтение веб-страниц из файловой системы и включение HTTP-аутентификации.
Если вам понравился этот пост, вам захочется узнать все о новейшей серии печатных и электронных книг SitePoint, Jump Start . Первый заголовок — Node.js Дона Нгуена — узнайте больше на SitePoint!