Как мне написать это, чтобы вернуться к родительским 2 уровням, чтобы найти файл?
fs.readFile(__dirname + 'foo.bar');
Как мне написать это, чтобы вернуться к родительским 2 уровням, чтобы найти файл?
fs.readFile(__dirname + 'foo.bar');
Попробуйте следующее:
fs.readFile(__dirname + '/../../foo.bar');
Обратите внимание на косую черту в начале относительного пути.
Используйте 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()
будет обрабатывать ведущие/конечные косые черты для вас и делать правильные вещи, и вам не нужно пытаться запомнить, когда существуют косые черты и когда они не работают.
Я знаю, что это немного придирчиво, но все ответы пока не совсем правильные.
Точка path.join() заключается в том, чтобы устранить необходимость того, чтобы вызывающий пользователь знал, какой разделитель каталога использовать (делая агностик платформы кода).
Технически правильный ответ будет примерно таким:
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
Я бы добавил это в качестве комментария к ответу Алекса Уэйна, но пока не достаточно репутации!
EDIT: согласно наблюдению пользователя1767586
Самый простой способ - использовать path.resolve
:
path.resolve(__dirname, '..', '..');
Похоже, вам понадобится модуль path
. (path.normalize
в частности)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
Если вы не уверены в том, где находится родительский элемент, это даст вам путь;
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
Если другой модуль вызывает ваш, и вы все равно хотите узнать местоположение основного файла, который вы используете, вы можете использовать модификацию кода @Jason:
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
Таким образом вы получите фактическое размещение script.
Вы можете использовать
path.join(__dirname, '../..');