2014-02-07 6 views
15

Ich baue eine Web-App in NodeJS, und ich implementiere meine API-Routen in separaten Modulen. In einer meiner Routen mache ich einige Dateimanipulationen und ich muss den Basis-App-Pfad kennen. Wenn ich __dirname verwende gibt es mir natürlich das Verzeichnis, in dem sich mein Modul befindet.App-Basispfad von einem Modul in NodeJS

Ich verwende diese zur Zeit die Basis App Pfad zu bekommen (da ich den relativen Pfad zu dem Modul von Basispfad kennen):

path.join(__dirname, "../../", myfilename) 

Gibt es einen besseren Weg, als ../../ mit? Ich betreibe Node unter Windows, also gibt es keine process.env.PWD und ich möchte sowieso nicht plattformspezifisch sein.

+0

Mit der Linie über mehrere Male/in mehreren modules ist repetitiv und inkonsistent Es könnte in diesem Fall nützlich sein, eine _static_-Funktion in einer _static_-Klasse zu erstellen (zum Beispiel 'Paths.getBasePath();') Sie müssen nur den relativen Pfad in der genannten Funktion aktualisieren Wenn Sie Ihre Projektstruktur ändern, können Sie 'require ('./ Paths'). getBasePath();' anywhere verwenden, ohne '' ../../ 'erneut zu verwenden. –

Antwort

11

Der Ansatz, __dirname zu verwenden, ist der zuverlässigste. Es wird dir immer das richtige Verzeichnis geben. Sie müssen sich nicht um ../../ in Windows-Umgebung sorgen, da path.join() dafür sorgen wird.

Es gibt jedoch eine alternative Lösung. Sie können process.cwd() verwenden, das das aktuelle Arbeitsverzeichnis des Prozesses zurückgibt. Dieser Befehl funktioniert einwandfrei, wenn Sie Ihre Knotenanwendung aus dem Basisanwendungsverzeichnis ausführen. Wenn Sie jedoch Ihre Knoten-Anwendung aus anderen Verzeichnis auszuführen, sagen, das übergeordnete Verzeichnis (zB node yourapp\index.js) dann __dirname Mechanismus funktioniert viel besser.

ich, dass hoffentlich helfen.

+0

' process.cwd() 'funktioniert gut mit der App läuft auf dem App-Basispfad. Vielen Dank! Das '../../' funktioniert, aber es fühlt sich mehr zusammen gehackt an. –