Node.js 同步读取文件作为字符串(不是缓冲区)

Node.js read a file as a string (not buffer) synchronously

如何将 Node.js 中的文件作为字符串而不是缓冲区来读取?我正在 Node.js 制作一个程序。在那里我需要同步读取一个文件,但如果我这样做,它 returns 它作为一个缓冲区而不是一个字符串。我的代码看起来像这样:

const fs = require('fs');

let content = fs.readFileSync('./foo.txt');
console.log(content) // actually logs it as a buffer

请帮忙。

fs.readFileSync 采用第二个参数,允许您指定带有选项的 JSON 对象,包括 returned 数据的编码。如果不指定,则默认 return 为 Buffer。因此,您可以将此示例的编码添加到 return 作为字符串。

让我们在设置 content 变量的示例中添加编码选项。我们将编码设置为 UTF-8,这是一种标准。

let content = fs.readFileSync('./foo.txt', {encoding: 'utf8'});

如果您不需要指定任何其他选项,还有一个快捷方式:

let content = fs.readFileSync('./foo.txt', 'utf8');

现在当我们记录 content 时,我们应该有一个 String 作为我们使用的结果。

官方文档:https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options

除了传递编码以确保您得到的是字符串而不是缓冲区之外,fs.readFileSync 函数的选项参数还允许您传入标志。

该方法的默认标志是"r",打开文件进行读取。如果你打开它进行读写,那么你应该传入另一个标志 - "r+".

如果您打开文件进行读写而不只是读取,您的代码将如下所示:

const content = fs.readFileSync('./foo.txt/', 'utf-8', 'r+');
console.log(content);

因为这是 node.js,您应该考虑改用异步 fs.readFile 函数。当然,你必须传递一个回调。