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

我已经提到这个问题了。 也就是说,我不相信我的问题在于对asynchronous的误解。

这是我的模块的相关部分。

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; } 

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

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

任何想法为什么?

根据'fs'模块的Node.js API文档 ,如果encoding选项没有被传递, read函数将返回一个缓冲区。

如果你传递一个值进行编码,它将返回一个带有该编码的string:

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

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

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

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

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

 fs.readFile(indexFile, function(err,data) { if (err) { return def.reject(err); } console.log('data', data.toString()); def.resolve(obj); });