2016-08-21 3 views
0

Meine Verzeichnisstruktur ist etwas wie unten:Erhalten Pfad in NodeJS

app/ 
    server/ 
     api/ 
      user/ 
       controller.js 

    images/ 
    image1.jpeg 

Das Problem ist, wenn innerhalb controller.js muß ich eine Zeichenfolge verwenden Lese image1.jpeg wie

var imagePath = __dirname + '/../../../images/images1.jpeg'; 
fs.readFile(imagePath,().... 

jetzt die oben funktioniert FEIN. Was ich aber nicht mag, ist diese Zeichenkette '/../../../'

Gibt es eine bessere Möglichkeit, auf Dateien im images/folder zuzugreifen?

Antwort

0

Ich verwende eine npm Modul node-app-root-path rief mir zu helfen, meine Pfade innerhalb der Anwendung NodeJS zu verwalten.

See: https://github.com/inxilpro/node-app-root-path

die Anwendung des Root-Pfad zu erhalten, würden Sie require('app-root-path') tun;

Beispiel:

global.appRoot = require('app-root-path'); 
var imagePath = global.appRoot.resolve('server/images'); 
var img1 = imagePath + '/image1.jpeg'; 

fs.readFile(img1,().... 

Nicht sicher, ob es oder nicht eine gute Idee, aber für diesen Fall habe ich die AppRoot als globalen Variable gespeichert und das ist so, dass es überall verfügbar sein wird, in meinem NodeJS-Anwendungsstapel, sogar für einige meiner anderen NodeJs-Bibliotheken.

Es gibt viele andere Verwendungen in ihrer Dokumentation erwähnt, schauen Sie und sehen, ob es Ihnen auch hilft.

1

Kurz von der Übergabe des Pfades zu app/images an die Steuerung, das ist ungefähr so ​​gut wie Sie können.

Sie könnten die module.parent Referenzen durchqueren, bis module.parent nicht gesetzt ist, wenn Sie sicher Annahmen darüber, wo Ihre Haupt Skript machen. Zum Beispiel, wenn Ihr Hauptskript app.js innerhalb app/ ist, könnten Sie so etwas wie:

var path = require('path'); 
var topLevel = module; 
while (topLevel.parent) 
    topLevel = topLevel.parent; 
topLevel = path.dirname(topLevel.filename); 

var imagesBasePath = path.join(topLevel, 'images'); 

// ... 

fs.readFile(path.join(imagesBasePath, 'images1.jpeg'), ...); 
1

Sie path.relative nutzen könnten. Wahrscheinlich möchten Sie diese als Konstanten speichern, aber Sie könnten Folgendes tun, um die Dinge lesbarer zu machen.

Übergeben Sie den Pfad zu Ihrem aktuellen Verzeichnis als ersten Parameter und den Pfad zum Bild selbst aus dem gleichen übergeordneten Verzeichnis (in diesem Fall app) und es wird den relativen Pfad vom aktuellen Verzeichnis zum Bild zurückgeben.

// returns '/../../../images/images1.jpeg' 
var relativePathToImage = path.relative(
    '/app/server/api/user',   
    '/app/images/images1.jpeg'); 

var pathToImage = __dirname + relativePathToImage;