我有一个相当简单的脚本,它尝试读取然后解析 JSON 文件。JSON 非常简单,我很确定它是有效的。
{
"foo": "bar"
}
现在,我一直在尝试用fs.readFile
. 读取时不会发生错误,并且返回的数据是字符串。唯一的问题是字符串为空。
我重复了我的代码但使用fs.readFileSync
了,这使用相同的路径完美地返回了文件。两者都utf-8
指定了编码。
如您所见,这是非常简单的代码。
fs.readFile('./some/path/file.json', 'utf8', function(err, data) {
if(!err) {
console.log(data); // Empty string...
}
});
console.log(fs.readFileSync('./some/path/file.json', 'utf8')); // Displays JSON file
可能是权限还是所有权?我尝试了一组权限755
,777
但无济于事。
我正在运行节点 v0.4.10。任何可以为我指明正确方向的建议将不胜感激。谢谢。
编辑:这是我的实际代码块。希望这会给你一个更好的主意。
// Make sure the file is okay
fs.stat(file, function(err, stats) {
if(!err && stats.isFile()) {
// It is okay. Now load the file
fs.readFile(file, 'utf-8', function(readErr, data) {
if(!readErr && data) {
// File loaded!
// Now attempt to parse the config
try {
parsedConfig = JSON.parse(data);
self.mergeConfig(parsedConfig);
// The config was loaded and merged
// We can now call the callback
// Pass the error as null
callback.call(self, null);
// Share the news about the new config
self.emit('configLoaded', file, parsedConfig, data);
}
catch(e) {
callback.call(self, new Error(file + ': The config file is not valid JSON.'));
}
}
else {
callback.call(self, new Error(file + ': The config file could not be read.'));
}
});
}
else {
callback.call(self, new Error(file + ': The config file does not exist.'));
}
});