Ошибка 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");
});