我试图在节点中解析json文件 但总有错误 我谷歌它但无法解决它。 你能救我吗?
undefined:1
undefined
^
SyntaxError: Unexpected token u
at Object.parse (native)
at Object.<anonymous> (app.js:13:19)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
这是我的代码
var app = express();
var mongodb = require("mongoskin");
var fs = require('fs');
var content;
fs.readFile('./config/db.json', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
var config = JSON.parse(content);
app.get('/', function(req, res){
res.send(config.left);
});
app.listen(process.env.VCAP_APP_PORT || 3000);
并且db.json就是这个。如您所见,没有错误。
{
"left": 3
}
答案 0 :(得分:6)
readFile
异步,因此在您为JSON.parse
分配值之前会调用content
行,因此content
具有默认值价值undefined
。
您有两种选择:
使用数据将逻辑移动到回调中。
var app = express();
var mongodb = require("mongoskin");
var fs = require('fs');
fs.readFile('./config/db.json', function read(err, data) {
if (err) {
throw err;
}
var config = JSON.parse(data); // <=== Note I'm using `data`, not `content`; we don't need a `content` variable anymore
app.get('/', function(req, res){
res.send(config.left);
});
app.listen(process.env.VCAP_APP_PORT || 3000);
});
使用readFile
的同步版本(readFileSync
)。
// ...
content = fs.readFileSync('./config/db.json');
var config = JSON.parse(content);
// ...
答案 1 :(得分:0)
content
等于undefined
。
您应该在readFile
回调中解析JSON数据,或者使用readFileSync
代替。
此外,您可能不应该从回调中抛出。
这让我觉得你对node.js的运作方式有一些误解,我强烈建议你阅读this