尝试使用fs.writeFile将文件写入兄弟目录。将Sitemap.xml
用于同一目录时可以正常工作,但不能使用相对路径。 public
目录存在,无论Sitemap.xml
是否存在,都会产生相同的错误。
相关目录结构:
/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 :(得分:21)
在节点中使用相对路径时,它们与节点进程相关。因此,如果您从node create-sitemap/index.js
目录运行/Users/tomchambers/projects/project/
之类的脚本,它会查找/Users/tomchambers/projects/public/Sitemap.xml
文件,该文件不存在。
在您的情况下,您可以使用__dirname
全局变量,返回as the docs say:
当前正在执行的脚本所在的目录的名称。
所以你的代码应该是这样的:
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 :(得分:0)
对我来说,问题是给定的文件名包含 Windows 上不允许的字符。
具体来说,我尝试在名称中添加时间戳,例如不允许使用 10:23:11
和 :
,这会导致此错误。