Почему Node.js 'fs.readFile() возвращает буфер вместо строки?

Я пытаюсь прочитать содержимое test.txt (которое находится в той же папке источника Javascript) и отобразить его с помощью этого кода:

var fs = require("fs");

fs.readFile("test.txt", function (err, data) {
    if (err) throw err;
    console.log(data);
});

Содержимое test.txt было создано на nano:

Тестирование Node.js readFile()

И я получаю это:

Nathan-Camposs-MacBook-Pro:node_test Nathan$ node main.js
<Buffer 54 65 73 74 69 6e 67 20 4e 6f 64 65 2e 6a 73 20 72 65 61 64 46 69 6c 65 28 29>
Nathan-Camposs-MacBook-Pro:node_test Nathan$ 

Ответ 1

От документы:

Если кодировка не указана, возвращается исходный буфер.

Что может объяснить <Buffer ...>. Укажите допустимую кодировку, например utf-8, в качестве второго параметра после имени файла. Например,

fs.readFile("test.txt", "utf8", function(err, data) {...});

Ответ 2

попробуйте

fs.readFile("test.txt", "utf8", function(err, data) {...});

в основном вам нужно указать кодировку.

Ответ 3

Он возвращает объект Buffer.

Если вы хотите его в строке, вы можете преобразовать его с помощью data.toString():

var fs = require("fs");

fs.readFile("test.txt", function (err, data) {
    if (err) throw err;
    console.log(data.toString());
});

Ответ 4

Переменная data содержит объект Buffer. Преобразуйте его в кодировку ASCII, используя следующий синтаксис:

data.toString('ascii', 0, data.length)

Ответ 5

Асинхронный:

fs.readFile('test.txt', 'utf8', callback);

Синхронизация:

var content = fs.readFileSync('test.txt', 'utf8');