web-dev-qa-db-ja.com

fs.writeFile使用時のENOENTエラー

Fs.writeFileを使用して兄弟ディレクトリーにファイルに書き込もうとしています。 Sitemap.xmlを同じディレクトリに使用すると、これは問題なく機能しますが、相対パスは使用できません。 publicディレクトリが存在し、Sitemap.xmlが存在するかどうかに関係なく同じエラーが発生します。

関連するdir構造:

/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'
13
Tom

ノードで相対パスを使用する場合、それらはノードプロセスに関連しています。したがって、node create-sitemap/index.jsディレクトリから/Users/tomchambers/projects/project/のようなスクリプトを実行すると、存在しない/Users/tomchambers/projects/public/Sitemap.xmlファイルが検索されます。

あなたの場合、__dirnameグローバル変数を使用することができます、それは次を返します ドキュメントが言うように

現在実行中のスクリプトが存在するディレクトリの名前。

したがって、コードは次のようになります。

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");
});
23