2015-02-18 13 views
11

Der Versuch, mit fs.writeFile in ein Geschwisterverzeichnis in eine Datei zu schreiben. Dies funktioniert einwandfrei, wenn Sie Sitemap.xml in demselben Verzeichnis, aber nicht mit dem relativen Pfad verwenden. Das public Verzeichnis existiert und es gibt den gleichen Fehler ob Sitemap.xml existiert.ENOENT-Fehler bei der Verwendung von fs.writeFile

Relevante dir Struktur:

/public 
    Sitemap.xml 
    app files 
/create-sitemap 
    index.js - file containing code below 
app.js 

fs.write('../public/Sitemap.xml', data.toString(), function(err) { 
    if (err) throw err; 
    console.log("Wrote sitemap to XML"); 
}); 


Toms-MacBook-Pro:moviehunter tomchambers$ node create-sitemap/index.js 

/Users/tomchambers/projects/project/create-sitemap/index.js:88 
     if (err) throw err; 
        ^
Error: ENOENT, open '../public/Sitemap.xml' 
+0

Wie sieht Ihre Projektordnerstruktur aus? –

+0

Ich habe das Detail hinzugefügt – Tom

Antwort

17

Wenn Sie relative Pfade in Knoten verwenden, sind sie mit dem Knoten Prozess. Also, wenn Sie Ihr Skript wie node create-sitemap/index.js aus dem Verzeichnis /Users/tomchambers/projects/project/ ausführen, wird es nach der Datei /Users/tomchambers/projects/public/Sitemap.xml suchen, die nicht existiert.

In Ihrem Fall, können Sie den __dirname globalen Variable verwenden könnten, die zurückgibt, as the docs say.

Der Name des Verzeichnisses, das das aktuell ausgeführten Skripts in residiert

So Ihr Code soll sieht so aus:

var path = require('path'); 

fs.write(path.join(__dirname, '../public/Sitemap.xml'), data.toString(), function(err) { 
    if (err) throw err; 
    console.log("Wrote sitemap to XML"); 
}); 
+1

Ich empfehle 'process.chdir()', um das Arbeitsverzeichnis Ihrer Anwendung in __dirname zu ändern (oder einen nützlicheren Pfad, wenn Sie zum Beispiel asar verwenden). Dadurch können Sie relative Pfade ohne zusätzlichen Aufwand verwenden. –

Verwandte Themen