Путь к базе приложений из модуля в NodeJS

Я создаю веб-приложение в NodeJS, и я реализую маршруты API в отдельных модулях. На одном из моих маршрутов я делаю некоторые манипуляции с файлами, и мне нужно знать путь базового приложения. если я использую __dirname, он дает мне каталог, в котором размещается мой модуль, конечно.

В настоящее время я использую это для получения базового пути приложения (учитывая, что я знаю относительный путь к модулю из базового пути):

path.join(__dirname, "../../", myfilename)

Есть ли лучший способ, чем использовать ../../? Я запускаю Node под Windows, поэтому нет process.env.PWD, и я все равно не хочу быть платформенным.

Ответ 1

Подход использования __dirname является самым надежным. Он всегда даст вам правильный каталог. Вам не нужно беспокоиться о ../../ в среде Windows, поскольку path.join() позаботится об этом.

Однако есть альтернативное решение. Вы можете использовать process.cwd(), который возвращает текущий рабочий каталог процесса. Эта команда отлично работает, если вы выполняете приложение node из каталога базового приложения. Однако, если вы выполните свое приложение node из другого каталога, скажем, его родительского каталога (например, node yourapp\index.js), тогда механизм __dirname будет работать намного лучше.

Я надеюсь, что это поможет.

Ответ 2

Вы можете использовать path.resolve() без аргументов, чтобы получить рабочий каталог, который обычно является базовым путем приложения. Если аргумент является относительным путем, то он предполагается относительно текущего рабочего каталога, поэтому вы можете написать

require(path.resolve(myfilename));

требовать вашего модуля в корне приложения.

Ответ 3

Вы можете определить глобальную переменную, как в вашем app.js:

global.__basedir = __dirname;

Тогда вы можете использовать эту глобальную переменную где угодно. Как это:

var base_path = __basedir