为什么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); });
- 函数完成前使用callback执行callback
- Node.js:res.redirect(“back”)得到错误('不能在发送之后设置头部')。
- mongoose.connection.collections.collection.drop()每隔一次都会抛出错误
- Node.js请求获取ETIMEDOUT和ESOCKETTIMEDOUT的模块
- Node.jscallback混淆
- 需要帮助相关的asynchronous函数执行stream程(await,promises,node.js)
- Node.js杀死一个asynchronous调用
- NodeJS – 不能实现asynchronousfunction
- Node.js模块从MongoDB数据库中获取数据