我如何正确找到一个.txt文件并使用NodeJS读取其内容

时间:2019-11-08 01:34:21

标签: node.js electron

我正在构建一个Electron应用程序,并且我有一个logs.txt文件,我想读取其中的内容并将其放在HTML页面上。我正在使用NodeJS和“ fs”模块,但是以下代码给了我错误“未捕获的错误:ENOENT:没有这样的文件或目录...”

我认为问题可能在于参考。这是下面的代码:

const fs = require('fs')

fs.readFile('file://' + __dirname + '/logs.txt', function(err, data) {
    if (err) throw err;
    document.getElementById("main").innerHTML = data;
});

在错误中,它向我显示了文件的确切位置。这是我遇到的错误:

Uncaught Error: ENOENT: no such file or directory, open 'file:///Users/MY_USER_ACCOUNT/files/code/git/MY_APP/src/usr/logs.txt'

这正是logs.txt文件所在的位置,但是由于某种原因,它仍然表示那里没有此类文件。

如果相关,我在Mac上。

谢谢。

2 个答案:

答案 0 :(得分:1)

使用路径而不是URL

fs.readFile如果传递string作为参数,则期望文件路径。

您正在向其传递一个file:// URL string。删除file://

传递文件的内容编码

您还希望将文件的编码传递给fs.readFile

const fs = require('fs')
fs.readFile(__dirname + '/logs.txt', 'utf-8', function(err, data) {
    if (err) throw err;
    document.getElementById("main").innerHTML = data;
});

(您确定要相对于JavaScript源文件的位置阅读logs.txt吗?)

使用承诺

const fsPromises = require('fs').promises;
const data = await fs.readFile(__dirname + '/logs.txt', 'utf-8')
document.getElementById("main").innerHTML = data;

答案 1 :(得分:0)

如果您使用的是file://格式,则需要创建一个URL对象以将其传递给fs.readFile(),而不是仅仅将其作为字符串传递:

const fileUrl = new URL('file://' + __dirname + '/logs.txt');
fs.readFile(fileUrl, function(err, data) {
  if (err) throw err;
  document.getElementById("main").innerHTML = data;
});

请参阅文档here