Share This
Связаться со мной
Крути в низ
Categories
//🗄️ 4 базовых функции для работы с файлами в Node.js

🗄️ 4 базовых функции для работы с файлами в Node.js

В Node.js программно манипулировать файлами можно с помощью встроенного модуля fs, содержащего функции, необходимые для чтения, записи, удаления и перемещения файлов на сервере. Рассмотрим эти функции в действии. Обсудить

4 bazovyh funkcii dlja raboty s fajlami v nodejs 0471683 - 🗄️ 4 базовых функции для работы с файлами в Node.js

Перед чтением инструкции убедитесь, что у вас уже установлен Node.js. Для работы с файлами используются промисы с синтаксисом async/await . Если вы незнакомы с концепцией асинхронного программирования в JavaScript, ознакомьтесь с нашим руководством.

Шаг 1. Читаем файлы с помощью readFile()

В каждом из следующих примеров мы сначала импортируем модуль fs – стандартный Node.js модуль для работы с файлами. В первом примере мы воспользуемся функцией readFile() – прочитаем файл, сохраним содержимое в переменной и выведем результат в консоль.

Начнем с настройки среды. Создадим папку node-files для хранения проекта:

         mkdir node-files cd node-files     

В этой папке создадим текстовый файл greetings.txt для тестирования работы нашей программы:

         echo "hello, hola, bonjour, hallo" > greetings.txt     

Команда echo выводит строковый аргумент в терминал, а символ > перенаправляет вывод в файл greetings.txt.

Cоздадим и откроем в текстовом редакторе файл readFile.js. Например, с помощью nano:

         nano readFile.js     

Начнем с импорта внутри файла программы модуля fs:

         const fs = require('fs').promises;     

Когда модуль fs только создавался, основным способом написания асинхронного кода в Node.js были коллбэки. Но по мере роста популярности промисов, команда Node.js поработала и над их поддержкой в модуле fs.

Создадим асинхронную функцию для чтения файла. Такие функции начинаются с ключевого слова async. С помощью функции можно разрешать промисы, используя await, вместо того чтобы связывать промис с помощью метода .then().

         const fs = require('fs').promises;  async function readFile(filePath) {   try {     const data = await fs.readFile(filePath);     console.log(data.toString());   } catch (error) {     console.error(`Got an error trying to read the file: ${error.message}`);   } }     

Чтобы ловить ошибки асинхронного чтения файлов, заключаем вызов fs.readFile() в блок try...catch.

По умолчанию fs.readFile() возвращает объект, который может хранить файлы любого типа. Когда журналируется содержимое файла, все байты преобразуются в текст с помощью метода toString().

Если обнаружена ошибка (если файл не найден или нет прав на чтение), в консоль выведется соответствующее сообщение.

Осталось лишь вызвать функцию.

         const fs = require('fs').promises;  async function readFile(filePath) {   try {     const data = await fs.readFile(filePath);     console.log(data.toString());   } catch (error) {     console.error(`Got an error trying to read the file: ${error.message}`);   } }  readFile('greetings.txt');     

Сохраняем файл программы и выходим из редактора. Запускаем скрипт:

         node readFile.js     

Получаем следующий результат:

         hello, hola, bonjour, hallo     

Шаг 2. Запись файлов с помощью writeFile()

Создадим другой программный файл writeFile.js:

         nano writeFile.js     

В этом примере мы напишем две функции: первая будет создавать CSV-файл, а вторая – добавлять в него данные.

Вставим в файл следующий код:

         const fs = require('fs').promises;  async function openFile() {   try {     const csvHeaders = 'name,quantity,price'     await fs.writeFile('groceries.csv', csvHeaders);   } catch (error) {     console.error(`Got an error trying to write to a file: ${error.message}`);   } }     

Сначала функция openFile() создает переменную csvHeaders, содержащую заголовки столбцов CSV-файла, а затем использует функцию fs.writeFile() для создания файла и записи в него данных. Первый аргумент – путь к файлу. Поскольку мы указали только имя, Node.js создаст файл в том же каталоге, в котором мы выполняем код. Второй аргумент – записываемые данные. Создадим еще одну функцию для добавления данных в конец файла:

         const fs = require('fs').promises;  async function openFile() {   try {     const csvHeaders = 'name,quantity,price'     await fs.writeFile('groceries.csv', csvHeaders);   } catch (error) {     console.error(`Got an error trying to write to a file: ${error.message}`);   } }  async function addGroceryItem(name, quantity, price) {   try {     const csvLine = `n${name},${quantity},${price}`     await fs.writeFile('groceries.csv', csvLine, { flag: 'a' });   } catch (error) {     console.error(`Got an error trying to write to a file: ${error.message}`);   } }     

Асинхронная функция addGroceryItem() принимает три аргумента: название товара, сумму и цену за единицу. Эти аргументы используются с шаблонным литеральным синтаксисом для формирования переменной csvLine, записываемой в файл.

Затем, как и в функции openFile(), используется метод writeFile(), но на этот раз есть третий аргумент: объект JavaScript c ключом flag и значением 'a' . Так мы сообщаем Node.js, что данные нужно добавить в конец файла. По умолчанию флаг имеет значение 'w', при котором создается новый файл, если он не существует, иначе файл перезаписывается. Вы можете узнать больше о флагах файловой системы в документации Node.js.

Для завершения скрипта добавим в конец файла программы следующие строки:

         (async function () {   await openFile();   await addGroceryItem('eggs', 12, 1.50);   await addGroceryItem('nutella', 1, 4); })();     

Запускаем код:

         node writeFile.js     

В текущем каталоге будет создан новый файл groceries.csv.

         cat groceries.csv     

Содержимое файла groceries.csv следующее:

         name,quantity,price eggs,12,1.5 nutella,1,4     

Вызов openFile() создал новый файл и добавил заголовки столбцов. Последующие вызовы addGroceryItem() добавляют две строки с данными.

Шаг 3. Удаление файлов с помощью unlink()

На этом шаге мы научимся удалять файлы с помощью функции unlink() модуля fs и напишем Node.js скрипт для удаления groceries.csv, созданного на предыдущем шаге. Создадим новый программный файл deleteFile.js:

         nano deleteFile.js     

Напишем в программном файле код, создающий асинхронную функцию deleteFile(), которая принимает путь к файлу в качестве аргумента и передает его функции fs.unlink(), чтобы та удалила файл из файловой системы:

         const fs = require('fs').promises;  async function deleteFile(filePath) {   try {     await fs.unlink(filePath);     console.log(`Deleted ${filePath}`);   } catch (error) {     console.error(`Got an error trying to delete the file: ${error.message}`);   } }  deleteFile('groceries.csv');     

Обратите внимание Когда вы удаляете файл с помощью функции unlink(), он не отправляется в recycle.bin или корзину, а навсегда удаляется из файловой системы. Это действие необратимо.

Сохраняем файл и запускаем код:

         node deleteFile.js     

На выходе получаем следующее:

         Deleted groceries.csv     

Чтобы убедиться, что файла больше нет, используем команду ls:

         ls deleteFile.js   greetings.txt   readFile.js     writeFile.js     

Шаг 4. Перемещение файлов с помощью rename()

Напоследок рассмотрим функцию перемещения. Перед тем как начать, создадим папку test-data, в которую будем перемещать файл:

         mkdir test-data     

Скопируем файл:

         cp greetings.txt greetings-2.txt     

Откроем для редактирования программный файл:

         nano moveFile.js     

Создадим функцию moveFile(), вызывающую rename(). В ней необходимо указать путь к местоположению исходного и целевого файлов.

         const fs = require('fs').promises;  async function moveFile(source, destination) {   try {     await fs.rename(source, destination);     console.log(`Moved file from ${source} to ${destination}`);   } catch (error) {     console.error(`Got an error trying to move the file: ${error.message}`);   } }  moveFile('greetings-2.txt', 'test-data/salutations.txt');     

Функция rename() может переместить файл в другую папку, переименовать файл в текущем каталоге или сделать и то, и другое одновременно, как в нашем коде.

Сохраним и запустим код:

         node moveFile.js     

В ответ получаем следующее:

         Moved file from greetings-2.txt to test-data/salutations.txt     

Подтвердим успех операции:

         ls deleteFile.js   greetings.txt   moveFile.js     readFile.js     test-data       writeFile.js     

Заключение

Мы изучили функции управления файлами с помощью Node.js. Сначала загрузили содержимое файла функцией readFile(). Затем создали новый файл и добавили в него данные с помощью writeFile(), удалили файл с unlink(), а затем переместили и переименовали файл посредством rename().

С помощью функций модуля fs разработчики могут контролировать использование файлов в программах Node.js. Кстати, у нас есть и другие полезные материалы по теме Node.js:

  • Платформа Node.js: руководство по эксплуатации для начинающих
  • Подборка бесплатных ресурсов для изучения Node.js
  • Зачем и как строить IoT с Node.js
  • Node.js Handbook: полезные ссылки и туториалы

  • 8 views
  • 0 Comment

Leave a Reply

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close