不适用于节点 js 中的 fs.readFile
Posted
技术标签:
【中文标题】不适用于节点 js 中的 fs.readFile【英文标题】:Not works fs.readFile in node js 【发布时间】:2016-01-25 09:20:26 【问题描述】:我有:
fs.readFile('../services/Prescipcion.xml', "utf8", function (err, data)
console.log("err->", err);
console.log("data", data);
);
它会记录:
err->
[Error: ENOENT: no such file or directory, open '../services/Prescipcion.xml']
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '../services/Prescipcion.xml'
我不明白为什么会这样。
【问题讨论】:
你在那个位置有文件吗?如果你是*NIX,那么试试ls ../services/Prescipcion.xml
【参考方案1】:
错误信息是no such file or directory
,所以乍一看这很可能意味着文件的路径不正确。
文件名不正确(错字?)或目录解析不正确。请注意,将针对 process.cwd()
解析相对路径:
process.cwd()
:返回进程的当前工作目录。
您可以尝试使用console.log(process.cwd())
来帮助您调试问题。
如果文件Prescipcion.xml
应该从运行脚本的地方本地检索,您还可以使用以下构造:
fs.readFileSync(path.join(__dirname, '../services') + '/Prescipcion.xml', 'utf8');
__dirname
: 当前执行的目录名 脚本驻留在其中。
【讨论】:
Take note that a relative path will be resolved against process.cwd()
很有帮助。【参考方案2】:
它对我有用
var fs = require("fs");
const readFIle = path =>
fs.readFile(__dirname + path, "utf8", (err, data) =>
if (err)
console.log(err.stack);
return;
console.log(data.toString());
);
console.log("Program Ended");
;
用法:
readFIle("/input.txt");
【讨论】:
【参考方案3】:一个对我有用的完整示例,基于其他答案
var fs = require('fs');
var path = require('path');
var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8');
let data = ''
readStream.on('data', function(chunk)
data += chunk;
).on('end', function()
console.log(data);
);
【讨论】:
【参考方案4】:当将数据从 Web 应用程序传递到 Express 服务器时,fs 根位于 Web 应用程序目录下,而不是服务器的根目录下。因此,第一个 writeFile 参数必须指向服务器目录之外的目录,或者链接到服务器文件树。
【讨论】:
【参考方案5】:你可以使用相对路径或绝对路径作为fs.readFile
参数,但关键是我对此感到困惑:
如果你有 let path = 'c:\a\b\c.d
并且你想将它用作 fs.readFile(path, 'utf-8', (err, content) => //...your stuffs)
的 arg 你应该注意 \
是 js 中的转义字符,所以 fs
阅读你的路径为c:abc.d
,那么它将使用此路径作为相对路径,因此fs
将搜索C:\Users\dir_to_your_project\c:abc.d
,这显然不是有效路径,并导致Error: ENOENT: no such file or directory...
错误
那么如何解决这个问题?
这很简单,您只需在所需路径中将\
替换为\\
,然后将其用作fs.readFile()
中的arg:
new_path_for_fsReadFileArg = path.replace(/\\/g,"\\\\");
【讨论】:
以上是关于不适用于节点 js 中的 fs.readFile的主要内容,如果未能解决你的问题,请参考以下文章
Cors 不适用于 XMLhttprequest 节点/快递
DNS Round Robin 故障转移不适用于 mqtt.js
邮递员原始数据有效,但表单数据不适用于节点中的 POST 请求