Выразительный JavaScript (Хавербеке) - страница 219

под названием >readFileSync.

>var fs = require("fs");

>console.log(fs.readFileSync("file.txt", "utf8"));

Синхронные функции использовать проще и полезнее для простых скриптов, где дополнительная скорость асинхронного метода не важна. Но заметьте – на время выполнения синхронного действия ваша программа полностью останавливается. Если ей надо отвечать на ввод пользователя или другим программам по сети, затыки ожидания синхронного I/O приводят к раздражающим задержкам.

Модуль HTTP

Ещё один основной модуль — >"http". Он даёт функционал для создания HTTP серверов и HTTP-запросов.

Вот всё, что нужно для запуска простейшего HTTP сервера:

>var http = require("http");

>var server = http.createServer(function(request, response) {

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

>  response.write("

Привет!

Вы запросили `"

>                 request.url + "`

");

>  response.end();

>});

>server.listen(8000);

Запустив скрипт на своей машины, вы можете направить браузер по адресу localhost:8000/hello, таким образом создав запрос к серверу. Он ответит небольшой HTML-страницей.

Функция, передаваемая как аргумент к >createServer, вызывается при каждой попытке соединения с сервером. Переменные >request и >response – объекты, представляющие входные и выходные данные. Первый содержит информацию по запросу, например свойство >url содержит URL запроса.

Чтобы отправить что-то назад, используются методы объекта >response. Первый, >writeHead, пишет заголовки ответа (см. главу 17). Вы даёте ему код статуса (в этом случае 200 для “OK”) и объект, содержащий значения заголовков. Здесь мы сообщаем клиенту, что он должен ждать документ HTML.

Затем идёт тело ответа (сам документ), отправляемое через >response.write. Этот метод можно вызывать несколько раз, если хотите отправлять ответ по кускам, к примеру, передавая потоковые данные по мере их поступления. Наконец, >response.end сигнализирует конец ответа.

Вызов >server.listen заставляет сервер слушать запросы на порту 8000. Поэтому вам надо в браузере заходить на localhost:8000, а не просто на localhost (где портом по умолчанию будет 80).

Для остановки такого скрипта Node, который не завершается автоматически, потому что ожидает следующих событий (в данном случае, соединений), надо нажать Ctrl-C.

Настоящий веб-сервер делает гораздо больше того, что описано в примере. Он смотрит на метод запроса (свойство >method), чтобы понять, какое действие пытается выполнить клиент, и на URL запроса, чтобы понять, на каком ресурсе это действие должно выполняться. Далее вы увидите более продвинутую версию сервера.