2015-09-21 27 views
23

Sembrava un problema semplice. Ma non sono in grado di rompere questo. All'interno helper1.js Vorrei accedere foobar.json (da config/dev/)NodeJS accesso al file con percorso relativo

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

non ho potuto ottenere questo lavoro fs: how do I locate a parent folder?

Qualsiasi aiuto qui sarebbe grande.

+1

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

+0

Sarebbe meglio se si potesse semplicemente salvare i dati json nel file' .js' (invece di '.json') E quindi dal file '.js'' module.exports' it. :) – AdityaParab

+2

@AdityaParab: se si salva il file JSON come .json invece di .js, non è necessario module.export - è possibile richiederlo direttamente. I file JSON vengono automaticamente esportati completamente (o per dirla in altro modo, i file JSON sono supportati da 'require()') – slebetman

risposta

51

È possibile utilizzare il modulo path per unire il percorso della directory in cui helper1.js risiede nel percorso relativo di foobar.json. Questo ti darà il percorso assoluto per 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'); 

Questo dovrebbe funzionare su Linux, OSX e Windows presupponendo una codifica UTF8.

+0

Non c'è bisogno di usare '__dirname' – osrpt

+4

@osrpt È meglio usare' __dirname' perché il percorso sarà corretto indipendentemente del contesto in cui viene eseguito lo script helper1 (ad esempio 'node helper/helper1.js' funzionerà dalla directory root). – AerandiR

+0

perfetto questo ha funzionato! Non ci ho percorso ma __dirname + '/ ..' – lonelymo

9

Semplice! La cartella denominata .. è la cartella principale, in modo da poter fare il percorso del file è necessario in quanto tale

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

Se avete bisogno di andare su due livelli, si può scrivere ../../ ecc

Alcuni dettagli su questo in this SO answer e nei suoi commenti

+2

Aggiungi qui qualche spiegazione al tuo codice. –

+2

Funziona solo con il file json/js. Non funzionerà su altri tipi di file come xml. Un approccio migliore è path.join() – Ganeshkumar

+0

Questa non è una soluzione molto buona se si sta chiamando il file da un'altra cartella. Se la struttura è src-> utils-> someUtilFile.js e hai anche un secondo file src-> logic-> someLogic.js e usi ../../utils/someUtilFile.js questo funzionerà. ma se stai chiamando someUtilFile.js da una diversa directory di struttura, questo non funzionerà. –