Ho un'applicazione Node.JS in esecuzione su Linux presso AWS EC2 che utilizza il modulo fs per leggere i file modello HTML. Ecco l'attuale struttura della domanda:Modo corretto per fare riferimento ai file relativi alla root dell'applicazione in Node.JS
/server.js
/templates/my-template.html
/services/template-reading-service.js
Il codice HTML modelli saranno sempre in quella posizione, invece, il modello-lettura-servizio può muoversi in posizioni diverse (sottodirectory più profonde, ecc) all'interno della template-lettura-service che uso fs.readFileSync() per caricare il file, in questo modo:
var templateContent = fs.readFileSync('./templates/my-template.html', 'utf8');
Questo getta il seguente errore:
Error: ENOENT, no such file or directory './templates/my-template.html'
sto assumendo tha t è perché il percorso './' sta risolvendosi nella directory '/ services /' e non nella root dell'applicazione. Ho anche provato a cambiare il percorso in "../templates/my-template.html" e questo ha funzionato, ma sembra fragile perché immagino che si stia risolvendo relativamente a "up one directory". Se sposto il servizio di lettura template in una sottodirectory più profonda, quel percorso si interromperà.
Quindi, qual è il modo corretto di fare riferimento ai file relativi alla radice dell'applicazione?
Non è __dirname in realtà il percorso in cui si trova lo script/modulo corrente? Quindi nel mio esempio, quando eseguo dall'interno di 'template-reading-service.js 'non risolve __dirname in'/services/'? – user1438940
@ user1438940 Ho pensato che si eseguisse il codice di lettura del file in '/ server.js'. Prova "../templates/my-template.html" – InspiredJW
no, il codice che esegue fs.getFileSync si trova in "template-reading-service.js". Non voglio usare "../"; questo è l'intero punto della mia domanda. Se uso "../" e successivamente sposto "template-reading-service.js" dalla directory "/ services /" a "/ services/templating /" quindi tutte le mie interruzioni di codice. Oppure, se voglio avere il percorso della directory template come un'impostazione in una configurazione globale, che sarebbe poi utilizzata da 20 diversi altri servizi, tutti situati in punti diversi nella struttura della directory, quindi "../" non funziona da ovunque – user1438940