Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

12.2.1. Пример использования Node: HTTP-сервер

В примере 12.2 приводится реализация простого HTTP-сервера, основанная на особенностях интерпретатора Node. Она обслуживает файлы в текущем каталоге и дополнительно реализует два адреса URL специального назначения, которые обслуживаются особым образом. В этой реализации используется модуль «http», входящий в состав интерпретатора Node, и применяются API доступа к файлам и потокам ввода/вывода, демонстрировавшиеся выше. В примере 18.17, в главе 18, демонстрируется аналогичный специализированный НТТР-сервер.

Пример 12.2. HTTP-сервер, основанный на особенностях Node

// Простой NodeJS HTTP-сервер, обслуживающий файлы в текущем каталоге

// и реализующий два специальных адреса URL для нужд тестирования.

// Подключение к серверу выполняется по адресу http://localhost;8000

// или http://127.0-0.1:8000

// Сначала необходимо загрузить используемые модули

var http = require( http'); // API НТТР-сервера

var fs = require('fs'); // Для работы с локальными файлами

var server = new http.Server; // Создать новый HTTP-сервер

server.listen(8000); // Прослушивать порт 8000.

// Для регистрации обработчиков событий в Node используется метод "оп".

// Когда сервер получает новый запрос, для его обработки вызывается функция,

server.on("request", function (request, response) {

// Выполнить разбор адреса URL

var url = require("url").parse(request.url);

// Специальный адрес URL, который вынуждает сервер выполнить задержку перед ответом.

// Это может быть полезно для имитации работы с медленным сетевым подключением,

if (url.pathname === "/test/delay") {

// Величина задержки определяется из строки запроса

// или устанавливается равной 2000 миллисекунд

var delay = parseInt(url.query) || 2000;

// Установить код состояния и заголовки ответа

response.writeHead(200, {"Content-Type": "text/plain; charset=UTF-8 "});

// Начать отправку ответа немедленно

response.write("Задержка на " + delay + " миллисекунд...”);

// А затем завершить другой функцией, которая будет вызвана позже.

setTimeout(function {

response.write("roTOBO.");

response.end;

}, delay);

}

// Если запрошен адрес "/test/mirror", отправить запрос обратно целиком.

// Удобно, когда необходимо увидеть тело и заголовки запроса,

else if (url.pathname === "/test/mirror") {

// Код состояния и заголовки ответа

response.writeHead(200,{"Content-Type": "text/plain; charset=UTF-8"});

// Вставить в ответ тело запроса

response.write(request.method + " " + request.url +

" HTTP/" + request.httpVersion + "\r\n");

// И заголовки запроса

for(var h in request.headers) {

response.write(h + ": + request.headers[h] + "\r\n");

}

response.write("\r\n");

// За заголовками следует дополнительная пустая строка

// Завершение отправки ответа выполняется следующими функциями-обработчиками:

// Если в chunk передается тело запроса, вставить его в ответ,

request.on("data", function(chunk) {

response.write(chunk); });

// Когда достигнут конец запроса, ответ также завершается,

request.on("end", function(chunk) { response.end; });

}

// Иначе обслужить файл из локального каталога,

Поделиться:
Популярные книги

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Младший сын

Балашов Дмитрий Михайлович
1. Государи московские
Научно-образовательная:
история
8.50
рейтинг книги
Младший сын

Запечатанный во тьме. Том 2

NikL
2. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 2

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Кодекс Охотника. Книга IV

Винокуров Юрий
4. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга IV

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Казань

Вязовский Алексей
2. Русский бунт
Фантастика:
альтернативная история
4.50
рейтинг книги
Казань

Курс 1. Октябрь

Фокс Гарри
2. Маркатис
Фантастика:
аниме
фэнтези
сказочная фантастика
5.00
рейтинг книги
Курс 1. Октябрь

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Я уже царь. Книга XXIX

Дрейк Сириус
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я уже царь. Книга XXIX

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Запечатанный во тьме. Том 1. Тысячи лет кача

NikL
1. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 1. Тысячи лет кача