使用 fs.writeFile 时出现 ENOENT 错误
ENOENT error when using fs.writeFile
正在尝试使用 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'
当您在节点中使用相对路径时,它们与节点进程相关。因此,如果您 运行 您的脚本类似于 /Users/tomchambers/projects/project/
目录中的 node create-sitemap/index.js
,它将查找 /Users/tomchambers/projects/public/Sitemap.xml
文件,该文件不存在。
在您的情况下,您可以使用 __dirname
全局变量,即 returns、as the docs say:
The name of the directory that the currently executing script resides in.
因此您的代码应如下所示:
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");
});
对我来说,问题是给定的文件名在 Windows.
上包含不允许的字符
具体来说,我尝试在名称中添加时间戳,例如10:23:11
和 :
是不允许的,这导致了这个错误。
正在尝试使用 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'
当您在节点中使用相对路径时,它们与节点进程相关。因此,如果您 运行 您的脚本类似于 /Users/tomchambers/projects/project/
目录中的 node create-sitemap/index.js
,它将查找 /Users/tomchambers/projects/public/Sitemap.xml
文件,该文件不存在。
在您的情况下,您可以使用 __dirname
全局变量,即 returns、as the docs say:
The name of the directory that the currently executing script resides in.
因此您的代码应如下所示:
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");
});
对我来说,问题是给定的文件名在 Windows.
上包含不允许的字符具体来说,我尝试在名称中添加时间戳,例如10:23:11
和 :
是不允许的,这导致了这个错误。