Ошибка ENOENT при использовании fs.writeFile

Попытка написать файл, используя fs.writeFile, в каталог sibling. Это отлично работает при использовании 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'

Ответ 1

Когда вы используете относительные пути в node, они связаны с процессом node. Итак, если вы запустите свой script как node create-sitemap/index.js из каталога /Users/tomchambers/projects/project/, он будет искать файл /Users/tomchambers/projects/public/Sitemap.xml, которого не существует.

В вашем случае вы можете использовать глобальную переменную __dirname, которая возвращает как говорят документы:

В списке находится каталог, в котором находится текущий script.

Итак, ваш код должен выглядеть так:

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