JavaScript. Подробное руководство, 6-е издание, стр. 165
Для большинства своих методов этот модуль предоставляет синхронные версии. Любой метод, имя которого оканчивается на «Sync», является блокирующим методом, возвращающим значение и возбуждающим исключение. Методы для работы с файловой системой, имена которых не оканчиваются на «Sync», являются неблокирующими - они возвращают результаты или ошибки посредством передаваемых им функций обратного вызова. Следующий фрагмент демонстрирует, как реализуется чтение текстового файла с использованием блокирующего метода и как реализуется чтение двоичного файла с использованием неблокирующего метода:
<b>// Синхронное чтение файла. Следует передать имя кодировки, </b><b>// чтобы в результате получить текст, а не двоичные байты, </b><b>var text = fs.readFileSync("config.json", "utf8");</b><b>// Асинхронное чтение двоичного файла. Следует передать функцию, чтобы получить данные </b><b>fs.readFile("image.png", function(err, buffer) { </b><b> if (err) throw err; // Если что-то пошло не так </b><b> process(buffer); // Содержимое файла в параметре buffer</b><b>});</b>Для записи в файл существуют аналогичные функции
<b>writeFile()</b><b>writeFileSync()</b><b>fs.writeFile("config.json", JSON.stringify(userprefs));</b>Функции, представленные выше, интерпретируют содержимое файла как единственную строку или объект
<b>Buffer</b><b>// Копирование файлов с применением API потоков ввода/вывода.</b><b>// Чтобы определить момент окончания копирования,</b><b>// ей нужно передать функцию обратного вызова </b><b>function fileCopy(filename1, filename2, done) {</b><b> var input = fs.createReadStream(filenamel); // Входной поток</b><b> var output = fs.createWriteStream(filename2); // Выходной поток</b><b> input.on("data", function(d) { output.write(d); }); // Копировать</b><b> input.on("error", function(err) { throw err; }); // Сообщить об ошибке</b><b> input.on("end", function() { // По исчерпании входных данных</b><b> output.end(); // закрыть выходной поток</b><b> if (done) done(); // И известить вызвавшую программу</b><b> });</b><b>}</b>Модуль «fs» включает также несколько методов, возвращающих список содержимого каталогов, атрибуты файлов и т. д. Следующая ниже программа для интерпретатора Node использует синхронные методы для получения списка содержимого каталога, а также для определения размеров файлов и времени последнего их изменения:
<b>#! /usr/local/bin/node</b><b>var fs = require("fs"), path = require("path"); // Загрузить модули </b><b>var dir = process.cwd(); // Текущий каталог </b><b>var files = fs.readdirSync(dir); // Или из команд. строки </b><b>var files = fs.readdirSync(dir); // Прочитать содер. кат-га </b><b>process.stdout.write("Name\tSize\tDate\n"); // Вывести заголовок </b><b>files.forEach(function(filename) { // Для каждого файла </b><b> var fullname = path.join(dir,filename); // Объед. имя и каталог </b><b> var stats = fs.statSync(fullname); // Получить атрибуты файла </b><b> if (stats.isDirectory()) filename += "/"; // Пометить подкаталоги </b><b> process.stdout.write(filename + // Вывести имя файла </b><b> "\t" + stats.size + "\t" + // размер файла </b><b> stats.mtime + ”\n"); // и время поcл. изменения</b><b>});</b>Обратите внимание на комментарий #! в первой строке, в примере выше. Это специальный комментарий, используемый в Unix, чтобы объявить сценарий, следующий далее, исполняемым, определив файл интерпретатора, который должен его выполнить. Интерпретатор Node игнорирует подобные строки комментариев, когда они находятся в первых строках файлов.
Модуль «net» определяет API для организации взаимодействий по протоколу TCP. (Для выполнения сетевых взаимодействий на основе дейтаграмм можно использовать модуль «dgram».) Ниже приводится пример очень простого сетевого TCP-сервера, реализованного на основе особенностей Node:
<b>// Простой эхо-сервер, реализованный на основе особенностей Node:</b><b>// он ожидает соединений на порту с номером 2000 и отправляет обратно клиенту</b><b>// все данные, которые получит от него.</b><b>var net = require('net');</b><b>var server = net.createServer();</b><b>server.listen(2000, function() {</b><b>console.log("Прослушивается порт 2000");</b><b>});</b><b>server.on("connection", function(stream) {</b>