Fs: как найти родительскую папку?

Как мне написать это, чтобы вернуться к родительским 2 уровням, чтобы найти файл?

fs.readFile(__dirname + 'foo.bar');

Ответ 1

Попробуйте следующее:

fs.readFile(__dirname + '/../../foo.bar');

Обратите внимание на косую черту в начале относительного пути.

Ответ 2

Используйте path.join http://nodejs.org/docs/v0.4.10/api/path.html#path.join

var path = require("path"),
    fs = require("fs");

fs.readFile(path.join(__dirname, '../..', 'foo.bar'));

path.join() будет обрабатывать ведущие/конечные косые черты для вас и делать правильные вещи, и вам не нужно пытаться запомнить, когда существуют косые черты и когда они не работают.

Ответ 3

Я знаю, что это немного придирчиво, но все ответы пока не совсем правильные.

Точка path.join() заключается в том, чтобы устранить необходимость того, чтобы вызывающий пользователь знал, какой разделитель каталога использовать (делая агностик платформы кода).

Технически правильный ответ будет примерно таким:

var path = require("path");

fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));

Я бы добавил это в качестве комментария к ответу Алекса Уэйна, но пока не достаточно репутации!

EDIT: согласно наблюдению пользователя1767586

Ответ 4

Самый простой способ - использовать path.resolve:

path.resolve(__dirname, '..', '..');

Ответ 5

Похоже, вам понадобится модуль path. (path.normalize в частности)

var path = require("path"),
    fs = require("fs");

fs.readFile(path.normalize(__dirname + "/../../foo.bar"));

Ответ 6

Если вы не уверены в том, где находится родительский элемент, это даст вам путь;

var path = require('path'),
    __parentDir = path.dirname(module.parent.filename);

fs.readFile(__parentDir + '/foo.bar');

Ответ 7

Если другой модуль вызывает ваш, и вы все равно хотите узнать местоположение основного файла, который вы используете, вы можете использовать модификацию кода @Jason:

var path = require('path'),
    __parentDir = path.dirname(process.mainModule.filename);

fs.readFile(__parentDir + '/foo.bar');

Таким образом вы получите фактическое размещение script.

Ответ 8

Вы можете использовать

path.join(__dirname, '../..');