为什么fs.readFile返回缓冲区?

时间:2014-10-09 02:06:20

标签: javascript node.js asynchronous q

我已经提到了this question。也就是说,我不相信我的问题在于对异步的误解。

这是我模块的相关部分。

var fs = require('fs');
var q = require('q');
var u = require('../utils/json');

var indexFile = './data/index.json';

function getIndex() {
    var def = q.defer(),
        promise = def.promise,
        obj;

    fs.readFile(indexFile, function(err,data) {
        if (err) {
            throw err;
            def.reject(err);
        }
        console.log('data', data);

        def.resolve(obj);
    });

    return promise;
}

当我记录'数据'时,我得到一个缓冲区(下面),而不是该文件的JSON内容。

<Buffer 5b 7b 22 68 65 6c 6c 6f 22 3a 22 77 6f 72 6c 64 22 7d 5d>

对于为什么有任何想法?

3 个答案:

答案 0 :(得分:13)

根据Node.js API docs for 'fs' module,如果未传递encoding选项,read函数将返回缓冲区。

如果传递一个编码值,它将返回一个包含该编码的字符串:

fs.readFile('/etc/passwd', 'utf-8', callback)

答案 1 :(得分:1)

试试这个......你需要包含编码

fs.readFile(indexFile,'utf8', function(err,data) {
    if (err) {
        throw err;
    }
    //Do something with data
    console.log(data);
});

答案 2 :(得分:1)

如前所述,fs模块需要编码选项作为第二个参数。

另外,如果您确定您的文件包含utf-8字符串,则可以使用;

fs.readFile(indexFile, function(err,data) {
    if (err) {
        return def.reject(err);
    }

    console.log('data', data.toString());

    def.resolve(obj);
});