2015-02-18 73 views
11

Bir kardeş dizine fs.writeFile kullanarak bir dosyaya yazmaya çalışıyorum. Bu, Sitemap.xml aynı dizinde kullanıldığında, ancak göreli yolla kullanıldığında iyi çalışır. public dizini var ve Sitemap.xml var olsun veya olmasın aynı hatayı verir.Fs.writeFile kullanırken hata oluştu

İlgili dir yapısı: Eğer düğüm göreli yolları kullandığınızda

/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

Proje klasörünüzün yapısı nasıl görünüyor? –

+0

Detay ekledim – Tom

cevap

17

, bunlar düğüm süreciyle ilgili ediyoruz. Yani, betik node create-sitemap/index.js gibi /Users/tomchambers/projects/project/ dizininden çalıştırırsanız, yok olan /Users/tomchambers/projects/public/Sitemap.xml dosyasını arar. Senin durumunda

, sen döndüren __dirname küresel değişkeni, as the docs say kullanabilirsiniz.

şu anda yürütülen komut dosyası içinde bulunduğu dizinin adı

Yani kod should şunun gibi görünüyor:

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

Uygulamanin çalisma dizini __dirname (veya örnegin kullanildiginda daha kullanisli bir yol) olarak degistirmek için 'process.chdir()' kullanmanızı öneririm. Bu, herhangi bir ekstra yaygara olmadan göreceli yolları kullanmanıza izin verecektir. –

İlgili konular