Как открыть файл в node js
Перейти к содержимому

Как открыть файл в node js

  • автор:

Как открыть файл в 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.

    1. Откройте командную строку и создайте новый каталог с помощью команды mkdir HelloNode , а затем введите каталог: cd HelloNode .
    2. Создайте файл JavaScript с именем «app.js» и переменной с именем «msg» в: echo var msg > app.js
    3. Откройте каталог и файл app.js в VS Code с помощью команды code . .
    4. Добавьте простую строковую переменную («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, выполните следующие действия.

    1. Откройте командную строку (командная строка, Powershell или любой другой вариант).
    2. Создайте новую папку проекта: mkdir ExpressProjects и введите этот каталог: cd ExpressProjects
    3. Используйте 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 install 
    npx cross-env DEBUG=HelloWorld:* npm start 

    Совет Часть DEBUG=myapp:* приведенной выше команды означает, что вы указываете Node.js включить ведение журнала в целях отладки. Не забудьте заменить «myapp» именем своего приложения. Имя приложения можно найти в файле package.json в свойстве «name». Использование npx cross-env устанавливает переменную среды DEBUG в любом терминале, но ее также можно задать с помощью конкретного терминала. Команда npm start сообщает npm о необходимости запуска скриптов в файле package.json .

    Screenshot of Express app running in a browser

  • Теперь вы можете просмотреть работающее приложение, открыв веб-браузер и перейдя по адресу: localhost:3000
  • Теперь, когда приложение HelloWorld Express выполняется локально в браузере, попробуйте внести изменения, открыв папку «views» в каталоге проекта и выбрав файл «index.pug». После открытия измените h1= title на h1= «Hello World!» и выберите Сохранить (Ctrl+S). Просмотрите изменения, обновив URL-адрес localhost:3000 в веб-браузере.
  • Чтобы остановить запуск приложения Express, в терминале введите: CTRL+C
  • Использование модуля Node.js

    В Node.js есть инструменты для разработки серверных веб-приложений, некоторые из них встроены и многие другие доступны через npm. Эти модули могут помочь во множестве задач:

    Средство Используется для
    gm, sharp Обработка изображений, включая редактирование, изменение размера, сжатие и т. д., непосредственно в коде JavaScript
    PDFKit Поколение PDF
    validator.js Проверка строки
    imagemin, UglifyJS2 Минификация
    spritesmith Создание листа спрайтов
    winston Ведение журналов
    commander.js Создание приложения командной строки

    Давайте воспользуемся встроенным модулем ОС для получения сведений об операционной системе компьютера:

    1. В командной строке откройте интерфейс командной строки Node.js. После входа вы увидите подсказку > , сообщающую вам, что вы используете Node.js: node
    2. Чтобы определить операционную систему, используемую в данный момент (которая должна возвращать ответ, сообщающий о том, что вы работаете под Windows), введите: os.platform()
    3. Чтобы проверить архитектуру ЦП, введите: os.arch()
    4. Чтобы просмотреть доступные в системе процессоры, введите: os.cpus()
    5. Оставьте интерфейс командной строки Node.js, введя .exit или дважды нажав CTRL+C.

    Совет Модуль 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); 

    2.17.png

    И здесь стоит обратить внимание, что несмотря на то, что функция 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); // выводим считанные данные >); 

    2.18.png

    Следует отметить, что эти методы полностью перезаписывают файл. Если надо дозаписать файл, то применяются методы 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); // выводим считанные данные >); 

    2.19.png

    Удаление файла¶

    Для удаления файла в синхронном варианте используется функция 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *