Why does Node.js' fs.readFile() return a buffer instead of string?


Question

I'm trying to read the content of test.txt(which is on the same folder of the Javascript source) and display it using this code:

var fs = require("fs");

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

The content of the test.txt was created on nano:

Testing Node.js readFile()

And I'm getting this:

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
300
10/9/2014 3:23:42 AM

Accepted Answer

From the docs:

If no encoding is specified, then the raw buffer is returned.

Which might explain the <Buffer ...>. Specify a valid encoding, for example utf-8, as your second parameter after the filename. Such as,

fs.readFile("test.txt", "utf8", function(err, data) {...});
447
2/10/2018 11:32:38 AM

try

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

basically you need to specify the encoding.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon