Как открыть файл в node js
Для работы с файлами в Node.js предназначен модуль fs. Рассмотрим, как с ним работать.
Чтение из файла
Для асинхронного чтения файла применяется функция fs.readFile :
fs.readFile(path[, options], callback)
Функция принимает до трех параметров:
- path : путь к файлу
- options : необязательный параметр, который представляет дополнительные параметры считывания, в частности, кодировку
- callback : функция обратного вызова, которая выполняется после завершения чтения.
callback(error, data)<>
Допустим, в папке проекта расположен текстовый файл hello.txt со следующим текстом:
Hello METANIT.COM! Hello World!
Для чтения файла «hello.txt» определим в папке проекта файл app.js со следующим кодом:
const fs = require("fs"); fs.readFile("hello.txt", function(error,data) < if(error) < // если возникла ошибка return console.log(error); >console.log(data.toString()); // выводим считанные данные >); console.log("Асинхронное чтение файлов");
И здесь стоит обратить внимание, что несмотря на то, что функция fs.readFile() вызывается первой, но так как она асинхронная, она не блокирует поток выполнения, поэтому ее результат выводится в самом конце.
c:\app> node app.js Асинхронное чтение файлов Hello METANIT.COM! Hello World! c:\app>
Для чтения файла в синхронном варианте применяется функция fs.readFileSync() :
fs.readFileSync(path[, options])
В метод передается путь к файлу, а в качестве второго параметра можно дополнительно указать кодировку. В качестве результат функция возвращает считанные данные. Пример применения:
const fs = require("fs"); const data = fs.readFileSync("hello.txt"); console.log(data.toString()); // выводим считанные данные console.log("Синхронное чтение файлов");
Консольный вывод программы:
c:\app> node app.js Hello METANIT.COM! Hello World! Синхронное чтение файлов c:\app>
Запись файла
Для асинхронной записи файла применяется функция fs.writeFile() , которая принимает 4 параметра:
fs.writeFile(file, data[, options], callback)
- file : путь к файлу
- data : записываемые данные
- options : дополнительный конфигурационный объект, который определяет следующие свойства:
- encoding : кодировка, которая используется при записи. Значение по умолчанию — «utf8»
- mode : Режим записи в виде числа. Значение по умолчанию — 0o666
- flag : один из системных флагов открытия файла. Значение по умолчанию — «w» (открытие на запись).
- flush : булевое свойство, которое указывает, надо ли данные сразу записывать файл. Значение по умолчанию — false.
- signal : объект AbortSignal, который позволяет прекратить запись
- callback : функция, которая вызывается после записи файла. Если запись закончилась ошибкой, то первый параметр функции содержит информацию об ошибке
Пример записи файла:
const fs = require("fs"); const data = "Hello Node.js\n"; fs.writeFile("hello2.txt", data, function(error) < if(error)< // если ошибка return console.log(error); >console.log("Файл успешно записан"); >);Для записи файла в синхронном варианте используется функция fs.writeFileSync() , которая в качестве параметра принимает путь к файлу и записываемые данные:
fs.writeFileSync("hello2.txt", "Hello Work. \n")Следует отметить, что эти методы по умолчанию полностью перезаписывают файл. Если надо дозаписать файл, то применяются методы fs.appendFile()/fs.appendFileSync() ^ которые принимают те же параметры:
const fs = require("fs"); // синхронное добавление fs.appendFileSync("hello2.txt", "Hello word\n"); // асинхронное добавление fs.appendFile("hello2.txt", "Hello walk\n", function(error)< if(error) return console.log(error); // если возникла ошибка console.log("Запись файла завершена"); >);В качестве альтернативы можно установить через объект конфигурации флаг на дозапись — флаг «a»:
fs.writeFile("hello2.txt", "Hello all\n", , function(error)< if(error) return console.log(error); // если возникла ошибка console.log("Запись файла завершена"); >);Получение информации о файле
Для получения информации о файле в асинхронном режиме применяется функция stat() :
fs.stat(path[, options], callback)
Первый параметр представляет путь к файлу. Второй, необязательный параметр представляет объект, у которого свойство bigint хранит логическое значение и указывает, надо ли возвратить данные в виде числа (при значении true). Третий параметр — функция обратного вызова, которая принимает два параметра:
callback(error, stat)<>
Первый параметр хранит информацию об ошибке (при ее наличии), а второй — статистику файла. Например, получим статистику файла:
const fs = require("fs"); // асинхронное добавление fs.stat("hello.txt", (error, stats) => < if (error) return console.error(error); console.log(stats.isFile()); // true console.log(stats.isDirectory()); // false console.log(stats); >);Полученная статистика представляет сложный объект с кучей свойств, которые можно увидеть по выводу. Например, я получу следующий вывод:
c:\app> node app.js true false Stats < dev: 16777220, mode: 33188, nlink: 1, uid: 501, gid: 20, rdev: 0, blksize: 4096, ino: 8648323536, size: 31, blocks: 8, atimeMs: 1700671481153.5369, mtimeMs: 1700667050455.9146, ctimeMs: 1700667050455.9146, birthtimeMs: 1643908248703.2, atime: 2023-11-22T16:44:41.154Z, mtime: 2023-11-22T15:30:50.456Z, ctime: 2023-11-22T15:30:50.456Z, birthtime: 2022-02-03T17:10:48.703Z >c:\app>
Для синхронного получения статистики применяется метод statSync() , который получает путь к файлу и возвращает объект статистики:
const fs = require("fs"); const stats = fs.statSync("hello2.txt") console.log(stats.isFile()); // true console.log(stats.isDirectory()); // false console.log(stats);Удаление файла
Для удаления файла в синхронном варианте используется функция fs.unlinkSync() , которая в качестве параметра принимает путь к удаляемому файлу:
fs.unlinkSync("hello.txt")Также для удаления файла можно использовать асинхронную функцию fs.unlink() , которая принимает путь к файлу и функцию, вызываемую при завершении удаления:
fs.unlink("hello.txt", (error) => < if (error) return console.log(error); // если возникла ошибка console.log("File deleted"); >);Работа с каталогами
Также для работы с каталогами Node.js предоставляет ряд функций.
Для создания каталога применяется функции mkdir() (асинхронная) и mkdirSync() (синхронная). В качестве параметра они принимают название каталога. Асинхронный вариант в качестве второго параметра принимает функцию обратного вызова, которая срабатывает при создании каталога:
const fs = require("fs"); fs.mkdir("test", (error) => < if (error) return console.log(error); console.log("Folder created"); >);Для считывания файлов из каталога применются функции readdir() (асинхронная) и readdirSync() (синхронная). В качестве параметра они принимают название каталога. Асинхронный вариант в качестве второго параметра принимает функцию обратного вызова, у которой второй параметр представляет список файлов и папок каталога:
const fs = require("fs"); fs.readdir("test", (error, files) => < if (error) return console.log(error); files.forEach((file) =>console.log(file)); >);Для удаления каталога применяются функции rmdir() (асинхронная) и rmdirSync() . В качестве параметра они принимают название каталога. Асинхронный вариант в качестве второго параметра принимает функцию обратного вызова, которая срабатывает при удалении каталога:
const fs = require("fs"); fs.rmdir("test", (error) => < if (error) return console.log(error); console.log("Folder deleted"); >);Руководство. Node.js для начинающих
Если вы новичок в использовании Node.js, это руководство поможет вам начать с некоторых основ.
- Использование Node.js в Visual Studio Code
- Создание первого веб-приложения Node.js с помощью Express
- Попробуйте использовать модуль Node.js
Необходимые компоненты
- Установка Node.js в Windows или в подсистеме Windows для Linux.
Если вы впервые пробуете Node.js, рекомендуем выполнить установку непосредственно в Windows. Дополнительные сведения см. в статье Выбор между установкой Node.js в Windows и подсистеме Windows для Linux.
Использование Node.js в Visual Studio Code
Если вы еще не установили Visual Studio Code, вернитесь к предыдущему разделу предварительных требований и выполните действия по установке, связанные с Windows или WSL.
- Откройте командную строку и создайте новый каталог с помощью команды mkdir HelloNode , а затем введите каталог: cd HelloNode .
- Создайте файл JavaScript с именем «app.js» и переменной с именем «msg» в: echo var msg > app.js
- Откройте каталог и файл app.js в VS Code с помощью команды code . .
- Добавьте простую строковую переменную («Hello World»), а затем отправьте содержимое строки в консоль, введя его в файле «app.js»:
var msg = 'Hello World'; console.log(msg);Обратите внимание, что при вводе console в файл «app.js», VS Code отображает поддерживаемые параметры, связанные с объектом console , который можно выбрать из использования IntelliSense. Попробуйте поэкспериментировать с Intellisense, используя другие объекты JavaScript.
Создание первого веб-приложения Node.js с помощью Express
Express — это минимальная, гибкая и оптимизированная платформа Node.js, которая упрощает разработку веб-приложения, которое может обслуживать несколько типов запросов, таких как GET, PUT, POST и DELETE. Express поставляется с генератором приложений, который автоматически создает архитектуру файлов для приложения.
Чтобы создать проект с помощью Express.js, выполните следующие действия.
- Откройте командную строку (командная строка, Powershell или любой другой вариант).
- Создайте новую папку проекта: mkdir ExpressProjects и введите этот каталог: cd ExpressProjects
- Используйте Express для создания шаблона проекта HelloWorld: npx express-generator HelloWorld —view=pug
Примечание. Мы используем команду npx , чтобы выполнить пакет Node Express.js без фактической установки (или временно установить его в зависимости от того, как вы хотите его представить). Если вы попытаетесь использовать команду express или проверить установленную версию Express с помощью: express —version , вы получите ответ, о том, что Express не удается найти. Если вы хотите глобально установить Express, чтобы применять его на постоянной основе, используйте: npm install -g express-generator . Список пакетов, установленных npm, можно просмотреть с помощью npm list . Они будут перечислены по глубине (количество вложенных каталогов в глубину). Установленные пакеты будут иметь глубину 0. Зависимости пакета будут иметь глубину 1, дополнительные зависимости на уровне глубины — 2 и т. д. Дополнительные сведения см. в статье Различие между npx and npm на сайте StackOverflow.
- bin . Содержит исполняемый файл, который запускает приложение. Он запускает сервер (через порт 3000, если не указана альтернатива) и настраивает базовую обработку ошибок.
- public . Содержит все общедоступные файлы, включая файлы JavaScript, таблицы стилей CSS, файлы шрифтов, изображения и другие ресурсы, необходимые пользователям при подключении к веб-сайту.
- routes . Содержит все обработчики маршрутов для приложения. В этой папке автоматически создаются два файла, index.js и users.js , которые служат примерами разделения конфигурации маршрута приложения.
- views . Содержит файлы, используемые модулем шаблонов. Express настроен на поиск подходящего представления при вызове метода преобразования. Обработчик шаблонов по умолчанию — Jade, но Jade является устаревшим в сравнении с Pug, поэтому для изменения подсистемы просмотра (шаблона) мы использовали флаг —view . Параметры флага —view и другие можно увидеть, используя express —help .
- app.js . Начальная точка приложения. Она загружает все и начинает обслуживать запросы пользователей. По сути, это связующий элемент, который содержит все части вместе.
- package.json . Содержит описание проекта, диспетчер скриптов и манифест приложения. Его основное назначение заключается в отслеживании зависимостей приложения и их соответствующих версий.
npm installnpx cross-env DEBUG=HelloWorld:* npm startСовет Часть DEBUG=myapp:* приведенной выше команды означает, что вы указываете Node.js включить ведение журнала в целях отладки. Не забудьте заменить «myapp» именем своего приложения. Имя приложения можно найти в файле package.json в свойстве «name». Использование npx cross-env устанавливает переменную среды DEBUG в любом терминале, но ее также можно задать с помощью конкретного терминала. Команда npm start сообщает npm о необходимости запуска скриптов в файле package.json .

- Теперь вы можете просмотреть работающее приложение, открыв веб-браузер и перейдя по адресу: localhost:3000
- Теперь, когда приложение HelloWorld Express выполняется локально в браузере, попробуйте внести изменения, открыв папку «views» в каталоге проекта и выбрав файл «index.pug». После открытия измените h1= title на h1= «Hello World!» и выберите Сохранить (Ctrl+S). Просмотрите изменения, обновив URL-адрес localhost:3000 в веб-браузере.
- Чтобы остановить запуск приложения Express, в терминале введите: CTRL+C
- В командной строке откройте интерфейс командной строки Node.js. После входа вы увидите подсказку > , сообщающую вам, что вы используете Node.js: node
- Чтобы определить операционную систему, используемую в данный момент (которая должна возвращать ответ, сообщающий о том, что вы работаете под Windows), введите: os.platform()
- Чтобы проверить архитектуру ЦП, введите: os.arch()
- Чтобы просмотреть доступные в системе процессоры, введите: os.cpus()
- Оставьте интерфейс командной строки Node.js, введя .exit или дважды нажав CTRL+C.
Использование модуля Node.js
В Node.js есть инструменты для разработки серверных веб-приложений, некоторые из них встроены и многие другие доступны через npm. Эти модули могут помочь во множестве задач:
| Средство | Используется для |
|---|---|
| gm, sharp | Обработка изображений, включая редактирование, изменение размера, сжатие и т. д., непосредственно в коде JavaScript |
| PDFKit | Поколение PDF |
| validator.js | Проверка строки |
| imagemin, UglifyJS2 | Минификация |
| spritesmith | Создание листа спрайтов |
| winston | Ведение журналов |
| commander.js | Создание приложения командной строки |
Давайте воспользуемся встроенным модулем ОС для получения сведений об операционной системе компьютера:
Совет Модуль OS Node.js можно использовать для выполнения таких действий, как проверка платформы и возврата переменной для конкретной платформы: Win32/.bat для разработки Windows, дарвин/.sh для Mac/unix, Linux, SunOS и т. д. (например, var isWin = process.platform === «win32»; ).
Работа с файлами¶
Для работы с файлами в Node.js предназначен модуль fs . Рассмотрим, как с ним работать.
Чтение из файла¶
Допустим, в одной папке с файлом приложения app.js расположен текстовый файл hello.txt с простейшим текстом, например:
Hello Node JS!
Для чтения файла в синхронном варианте применяется функция fs.readFileSync() :
let fileContent = fs.readFileSync("hello.txt", "utf8");
В метод передается путь к файлу относительно файла приложения app.js , а в качестве второго параметра указывается кодировка для получения текстового содержимого файла. На выходе получаем считанный текст.
Для асинхронного чтения файла применяется функция fs.readFile :
fs.readFile("hello.txt", "utf8", function(error,data)< >);
Первый и второй параметр функции опять же соответственно путь к файлу и кодировка. А в качестве третьего параметра передается функция обратного вызова, которая выполняется после завершения чтения. Первый параметр этой функции хранит информацию об ошибке при наличии, а второй — собственно считанные данные.
Для чтения файла определим в файле app.js следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13
const fs = require('fs'); // асинхронное чтение fs.readFile('hello.txt', 'utf8', function (error, data) console.log('Асинхронное чтение файла'); if (error) throw error; // если возникла ошибка console.log(data); // выводим считанные данные >); // синхронное чтение console.log('Синхронное чтение файла'); let fileContent = fs.readFileSync('hello.txt', 'utf8'); console.log(fileContent);

И здесь стоит обратить внимание, что несмотря на то, что функция fs.readFile() вызывается первой, но так как она асинхронная, она не блокирует поток выполнения, поэтому ее результат выводится в самом конце.
Запись файла¶
Для записи файла в синхронном варианте используется функция fs.writeFileSync() , которая в качестве параметра принимает путь к файлу и записываемые данные:
fs.writeFileSync('hello.txt', 'Привет ми ми ми!');
Также для записи файла можно использовать асинхронную функцию fs.writeFile() , которая принимает те же параметры:
fs.writeFile('hello.txt', 'Привет МИГ-29!');
В качестве вспомогательного параметра в функцию может передаваться функция обратного вызова, которая выполняется после завершения записи:
1 2 3 4 5 6 7 8 9 10
const fs = require('fs'); fs.writeFile('hello.txt', 'Hello мир!', function (error) if (error) throw error; // если возникла ошибка console.log( 'Асинхронная запись файла завершена. Содержимое файла:' ); let data = fs.readFileSync('hello.txt', 'utf8'); console.log(data); // выводим считанные данные >);

Следует отметить, что эти методы полностью перезаписывают файл. Если надо дозаписать файл, то применяются методы fs.appendFile() / fs.appendFileSync() :
1 2 3 4 5 6 7 8 9 10 11 12 13
const fs = require('fs'); fs.appendFileSync('hello.txt', 'Привет ми ми ми!'); fs.appendFile('hello.txt', 'Привет МИД!', function (error) if (error) throw error; // если возникла ошибка console.log( 'Запись файла завершена. Содержимое файла:' ); let data = fs.readFileSync('hello.txt', 'utf8'); console.log(data); // выводим считанные данные >);

Удаление файла¶
Для удаления файла в синхронном варианте используется функция fs.unlinkSync() , которая в качестве параметра принимает путь к удаляемому файлу:
fs.unlinkSync('hello.txt');
Также для удаления файла можно использовать асинхронную функцию fs.unlink() , которая принимает путь к файлу и функцию, вызываемую при завершении удаления:
1 2 3 4 5
fs.unlink('hello.txt', (err) => if (err) console.log(err); // если возникла ошибка else console.log('hello.txt was deleted'); >);
Node js запустить скрипт [дубликат]
Поместите «hallo.js» в папку «Мои документы» и выполните в «Командная строка» команду «node ./example.js» (без скобок конечно). Для того, чтоб запускать файл из произвольной директории (папки) погуглите команду ‘cd’ для windows. И приведите содержимое файла hallo.js
Отслеживать
ответ дан 18 мая 2014 в 17:17
3,065 12 12 серебряных знаков 19 19 бронзовых знаков
вообще, мне надо написать чат но пока я только установил node.js не имею понятия как , что и куда писать
18 мая 2014 в 17:22
не скоро у вас чат будет. это асинхронность выносит мозг поначалу. Обязательно посмотрите [это][1] [1]: learn.javascript.ru/nodejs-screencast