Обновлено: 21.11.2024
__dirname — это переменная среды, которая сообщает вам абсолютный путь к каталогу, содержащему исполняемый в данный момент файл.
В этой статье вы узнаете, как реализовать __dirname в вашем проекте Node.js.
Предпосылки
Для выполнения этого руководства вам потребуется:
- Общие знания Node.js. Чтобы узнать больше о Node.js, ознакомьтесь с нашей серией статей «Как программировать в Node.js».
Это руководство было проверено с помощью Node.js версии 17.2.0 и npm версии 8.2.0.
Шаг 1 — Настройка проекта
В этом руководстве будет использоваться следующая примерная структура каталогов, чтобы изучить, как работает __dirname:
Вы можете начать с создания каталога dirname-example в своем терминале:
Перейдите в каталог проекта:
Инициализируйте его как проект Node.js:
Теперь вы создадите каталоги и файлы для экспериментов.
Шаг 2 — Использование __dirname
Вы можете использовать __dirname, чтобы проверить, в каких каталогах находятся ваши файлы.
Создайте и отредактируйте файл controller.js в подкаталоге api в каталоге src:
Затем запустите скрипт:
Создайте и отредактируйте файл hello.js в каталоге cronjobs:
Затем запустите скрипт:
Обратите внимание, что __dirname имеет разное значение в зависимости от того, какой файл вы используете для консоли. Метод process.cwd() также возвращает значение, но вместо этого каталог проекта. Переменная __dirname всегда возвращает абсолютный путь к месту, где находятся ваши файлы.
Шаг 3 — Работа с каталогами
В этом разделе вы узнаете, как использовать __dirname для создания новых каталогов, указания на них, а также добавления новых файлов.
Создание новых каталогов
Чтобы создать новый каталог в файле index.js, вставьте __dirname в качестве первого аргумента для path.join() и имя нового каталога в качестве второго:
Теперь вы создали новый каталог images после вызова метода mdirSync(), который содержит __dirname в качестве абсолютного пути.
Указание на каталоги
Еще одна уникальная функция – возможность указывать на каталоги. В вашем файле index.js объявите переменную и передайте значение __dirname в качестве первого аргумента в path.join() , а ваш каталог, содержащий статические файлы, в качестве второго:
Здесь вы указываете Node.js использовать __dirname для указания на общедоступный каталог, содержащий статические файлы.
Добавление файлов в каталог
Вы также можете добавлять файлы в существующий каталог. В файле index.js объявите переменную и включите __dirname в качестве первого аргумента и файл, который вы хотите добавить, в качестве второго:
Использование метода openSync() добавит файл, если он не существует в вашем каталоге.
Заключение
Node.js позволяет создавать каталоги и указывать на них. И добавляйте файлы в существующие каталоги с помощью модульной переменной среды.
Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!
Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.
Метод интерфейса FileSystemDirectoryEntry getFile() возвращает объект FileSystemFileEntry, соответствующий файлу, содержащемуся где-то в поддереве каталога, корнем которого является каталог, для которого он был вызван.
Синтаксис
Параметры
USVString, указывающий путь относительно каталога, для которого вызывается метод, и описывающий, какую запись файла нужно вернуть.
Объект, который позволяет указать, создавать ли запись, если она отсутствует, и является ли это ошибкой, если файл уже существует. Эти параметры в настоящее время бесполезны в веб-контекстах. Дополнительные сведения см. в разделе параметров параметров.
Метод, вызываемый после создания FileSystemFileEntry. Метод получает единственный параметр: объект FileSystemFileEntry, представляющий рассматриваемый файл.
Метод, вызываемый при возникновении ошибки. Получает в качестве единственного входного параметра объект DOMException, описывающий возникшую ошибку.
Параметры параметров
Объект параметров параметров принимает следующие параметры:
Если это свойство имеет значение true , а запрошенный файл не существует, пользовательский агент должен его создать. Значение по умолчанию — ложь. Родительский каталог уже должен существовать.
Если задано значение true и параметр create также имеет значение true , файл не должен существовать до выполнения вызова. Вместо этого должна быть возможность создать его заново во время вызова. Значение по умолчанию — ложь. Этот параметр игнорируется, если create имеет значение false .
В таблице ниже описаны результаты каждой возможной комбинации этих флагов в зависимости от того, существует ли уже путь к целевому файлу.
параметр создания | эксклюзивный параметр | Условие пути | Результат |
< tbody> false | Игнорируется | Путь существует и является файлом | Вызывается SuccessCallback с FileSystemFileEntry . |
false | Игнорируется | Путь существует, но является каталогом | < td>вызывается errorCallback с соответствующим кодом ошибки (если обратный вызов был предоставлен).
true | false | Path существует | Существующий файл удаляется и заменяется новым, затем вызывается successCallback с FileSystemFileEntry . |
true | false | Путь не существует | Файл создается, затем FileSystemFileEntry передается в successCallback . |
true | true | Путь существует | Вызов errorCallback с соответствующей ошибкой, такой как FileError.PATH_EXISTS_ERR . |
правда | true | Путь не существует | Файл создается, затем FileSystemFileEntry передается в successCallback . |
< /таблица>
Возвращаемое значение
Исключения
Вызывается, если параметр создания не был указан (или был указан как false ), а файл не существует.
Вызывается, если запрос на доступ к файлу был отклонен по соображениям безопасности.
Вызывается, если указанный путь не является файлом; это, вероятно, каталог, но может быть и неподдерживаемый файловый дескриптор, например канал; это в некоторой степени зависит от пользовательского агента.
Пример
В этом примере представлена функция, задачей которой является поиск в каталоге данных пользовательского приложения файла JSON, содержащего пользовательский словарь для указанного языка, а затем загрузка этого словаря.
Модуль path предоставляет утилиты для работы с путями к файлам и каталогам. Доступ к нему можно получить, используя:
Работа модуля пути по умолчанию зависит от операционной системы, в которой работает приложение Node.js. В частности, при работе в операционной системе Windows модуль пути предполагает, что используются пути в стиле Windows.
Поэтому использование path.basename() может привести к разным результатам в POSIX и Windows:
Для достижения согласованных результатов при работе с путями к файлам Windows в любой операционной системе используйте path.win32 :
В POSIX и Windows:
Для достижения согласованных результатов при работе с путями к файлам POSIX в любой операционной системе используйте path.posix :
В POSIX и Windows:
В Windows Node.js использует концепцию рабочего каталога для каждого диска. Такое поведение можно наблюдать при использовании пути к диску без обратной косой черты. Например, path.resolve('C:\\') потенциально может возвращать результат, отличный от path.resolve('C:') . Дополнительные сведения см. на этой странице MSDN.
Теперь при передаче в качестве аргумента пути значения, отличного от строки, возникает ошибка.
- путь
- ext Необязательное расширение файла.
- Возвращает:
Метод path.basename() возвращает последнюю часть пути аналогично команде basename Unix. Завершающие разделители каталогов игнорируются, см. path.sep .
Хотя Windows обычно обрабатывает имена файлов, включая расширения файлов, без учета регистра, эта функция этого не делает. Например, C:\\foo.html и C:\\foo.HTML ссылаются на один и тот же файл, но basename обрабатывает расширение как строку с учетом регистра:
Выдается ошибка TypeError, если path не является строкой или если указан ext, который не является строкой.
Предоставляет разделитель пути для конкретной платформы:
Например, в POSIX:
Теперь при передаче в качестве аргумента пути значения, отличного от строки, возникает ошибка.
Метод path.dirname() возвращает имя каталога path , подобно команде Unix dirname. Завершающие разделители каталогов игнорируются, см. path.sep .
Выдается ошибка TypeError, если путь не является строкой.
Теперь при передаче в качестве аргумента пути значения, отличного от строки, возникает ошибка.
Метод path.extname() возвращает расширение пути из последнего вхождения . символ (точка) до конца строки в последней части пути. Если нет . на последнем участке пути или если их нет. символов, отличных от первого символа базового имени пути (см. path.basename() ), возвращается пустая строка.
Выдается ошибка TypeError, если путь не является строкой.
- pathObject Любой объект JavaScript, имеющий следующие свойства:
- каталог
- корень
- база
- имя
- дополнительно
Метод path.format() возвращает строку пути из объекта. Это противоположно path.parse() .
При предоставлении свойств pathObject помните, что существуют комбинации, в которых одно свойство имеет приоритет над другим:
- pathObject.root игнорируется, если указан pathObject.dir
- pathObject.ext и pathObject.name игнорируются, если pathObject.base существует
Например, в POSIX:
Метод path.isAbsolute() определяет, является ли path абсолютным путем.
Если указанный путь представляет собой строку нулевой длины, будет возвращено значение false.
Например, в POSIX:
Выдается ошибка TypeError, если путь не является строкой.
<ли>. paths Последовательность сегментов пути
- Возвращает:
Метод path.join() объединяет все заданные сегменты пути вместе, используя разделитель для конкретной платформы в качестве разделителя, а затем нормализует полученный путь.
Сегменты пути нулевой длины игнорируются. Если объединенная строка пути является строкой нулевой длины, тогда '.' будет возвращено, представляя текущий рабочий каталог.
Выдается ошибка TypeError, если какой-либо из сегментов пути не является строкой.
Метод path.normalize() нормализует заданный путь, разрешая '..' и '.' сегменты.
При обнаружении нескольких последовательных символов разделения сегментов пути (например, / в POSIX и \ или / в Windows) они заменяются одним экземпляром разделителя сегментов пути для конкретной платформы ( / в POSIX и \ в Windows). ). Завершающие разделители сохраняются.
Если путь представляет собой строку нулевой длины, '.' возвращается, представляя текущий рабочий каталог.
Например, в POSIX:
Поскольку Windows распознает несколько разделителей пути, оба разделителя будут заменены экземплярами предпочтительного разделителя Windows ( \ ):
Выдается ошибка TypeError, если путь не является строкой.
Метод path.parse() возвращает объект, свойства которого представляют важные элементы пути. Завершающие разделители каталогов игнорируются, см. path.sep .
Возвращенный объект будет иметь следующие свойства:
Например, в POSIX:
Выдается ошибка TypeError, если путь не является строкой.
Отображается как require('path/posix') .
Добавлено в: v0.11.15
Свойство path.posix обеспечивает доступ к специфичным для POSIX реализациям методов пути.
Доступ к API осуществляется через require('path').posix или require('path/posix') .
В Windows начальные косые черты для путей UNC теперь включаются в возвращаемое значение.
Метод path.relative() возвращает относительный путь от к до на основе текущего рабочего каталога. Если от и до каждого разрешается один и тот же путь (после вызова path.resolve() для каждого), возвращается строка нулевой длины.
Если строка нулевой длины передается как from или to , вместо строк нулевой длины будет использоваться текущий рабочий каталог.
Например, в POSIX:
Выдается ошибка TypeError, если from или to не является строкой.
<ли>. paths Последовательность путей или сегментов пути
- Возвращает:
Метод path.resolve() преобразует последовательность путей или сегментов пути в абсолютный путь.
Заданная последовательность путей обрабатывается справа налево, с добавлением каждого последующего пути до тех пор, пока не будет построен абсолютный путь. Например, учитывая последовательность сегментов пути: /foo , /bar , baz , вызов path.resolve('/foo', '/bar', 'baz') вернет /bar/baz, потому что 'baz' не является абсолютный путь, но '/bar' + '/' + 'baz'.
Если после обработки всех заданных сегментов пути абсолютный путь еще не сгенерирован, используется текущий рабочий каталог.
Результирующий путь нормализуется, а завершающие косые черты удаляются, если только путь не разрешается в корневой каталог.
Сегменты пути нулевой длины игнорируются.
Если сегменты пути не переданы, path.resolve() вернет абсолютный путь к текущему рабочему каталогу.
Выдается ошибка TypeError, если какой-либо из аргументов не является строкой.
Предоставляет разделитель сегментов пути для конкретной платформы:
Например, в POSIX:
В Windows как прямая косая черта (/), так и обратная косая черта (\) принимаются в качестве разделителей сегментов пути; однако методы пути добавляют только обратную косую черту ( \ ).
Только в системах Windows возвращает эквивалентный путь с префиксом пространства имен для заданного пути. Если путь не является строкой, путь будет возвращен без изменений.
Этот метод имеет смысл только в системах Windows. В системах POSIX этот метод не работает и всегда возвращает путь без изменений.
Отображается как require('path/win32') .
Добавлено в: v0.11.15
Свойство path.win32 обеспечивает доступ к специфичным для Windows реализациям методов пути.
Доступ к API осуществляется через require('path').win32 или require('path/win32') .
Утилита для получения файлового объекта JS из пути локальной файловой системы при использовании Node вместе с клиентским интерфейсом.
Это решает проблему отсутствия взаимодействия между файловой системой Node fs (к которой у браузера нет доступа) и типом объекта File браузера, который Node не может создать.
Установить
Это модуль Node.js, доступный через реестр npm. Установка выполняется с помощью команды npm install:
Как использовать
Утилита содержит две функции:
- LocalFileData() : функция конструктора объекта, которая принимает абсолютный путь в качестве аргумента
Вызовите это в среде Node, передав абсолютный путь в качестве одного аргумента, чтобы создать объект LocalFileData, содержащий все данные, необходимые для создания файлового объекта во внешнем клиенте:
- name : имя исходного файла
- arrayBuffer : arrayBuffer, созданный с использованием буфера исходного файла.
- type : тип MIME, основанный на расширении исходного файла. Возвращает неопределенное значение, если оно не может быть выведено.
- constructFileFromLocalFileData(): функция для преобразования предоставленного объекта LocalFileData в объект JS File. Это должно выполняться во внешнем коде, который имеет доступ к конструктору window.File.
После создания этот файл ведет себя так же, как объект JS File, созданный, например, с помощью средства выбора файлов HTML.
Случаи использования
get-file-object-from-local-path был создан для указания файлов для обработки и последующей отправки из основного потока в поток рендерера в Electron; однако экземпляр LocalFileData — это простой объект, который можно сериализовать/строково и передавать любым требуемым способом.
- Клиент отправляет путь к файлу в среду Node.js
- Бэкэнд извлекает файл, обрабатывает его и создает объект LocalFileData результата
- Среда Node.js отправляет объект LocalFileData клиенту
- Клиент преобразует объект LocalFileData в объект File, например. загрузить на сервер
Ограничения
Читайте также: