2015-09-21 3 views
23

Это казалось прямой проблемой. Но я не могу это взломать. В helper1.js Я хотел бы получить доступ к foobar.json (от config/dev/)NodeJS доступ к файлу с относительным путем

root 
    -config 
    --dev 
    ---foobar.json 
    -helpers 
    --helper1.js 

я не мог получить эту работу fs: how do I locate a parent folder?

Любая помощь здесь было бы здорово.

+1

'.. \ config \ dev \ foobar.json' – Ben

+0

Было бы лучше, если бы вы могли просто сохранить свои json-данные в файле .js' (вместо' .json') И то из '.js' файла' module.exports' это. :) – AdityaParab

+2

@AdityaParab: Если вы сохраните файл JSON как .json, а не .js, вам не понадобится его module.export - вы можете потребовать его напрямую. JSON-файл автоматически полностью экспортируется (или, по-другому, файлы JSON поддерживаются 'require()') – slebetman

ответ

51

Вы можете использовать модуль path, чтобы присоединиться к пути к каталогу, в котором helper1.js проживает до относительного пути foobar.json. Это даст вам абсолютный путь к foobar.json.

var fs = require('fs'); 
var path = require('path'); 

var jsonPath = path.join(__dirname, '..', 'config', 'dev', 'foobar.json'); 
var jsonString = fs.readFileSync(jsonPath, 'utf8'); 

Это должно работать на Linux, OSX и Windows, предполагая кодировку UTF8.

+0

Не нужно использовать '__dirname' – osrpt

+4

@osrpt. Лучше использовать' __dirname', потому что путь будет правильным независимо контекста, в котором выполняется скрипт helper1 (например, 'node helers/helper1.js' будет работать из корневого каталога). – AerandiR

+0

отлично! Я не наш путь, но __dirname + '/ ..' – lonelymo

9

Простой! Папка с именем .. является родительской папки, так что вы можете сделать путь к нужному файлу в качестве такого

var foobar = require('../config/dev/foobar.json'); 

Если вам нужно подняться на два уровня, можно было бы написать ../../ т.д.

Некоторые подробности об этом в this SO answer и его комментариев

+2

Пожалуйста, добавьте некоторые пояснения к вашему коду здесь. –

+2

Это будет работать только в файле json/js. Он не будет работать на других типах файлов, таких как xml. Лучшим подходом является path.join() – Ganeshkumar

+0

Это не очень хорошее решение, если вы вызываете файл из другой папки. Если вы создаете src-> utils-> someUtilFile.js, а также имеете второй файл src-> logic-> someLogic.js, и вы используете ../../utils/someUtilFile.js, это сработает. но если вы вызываете someUtilFile.js из другого каталога структуры, это не сработает. –

Смежные вопросы