Node.JS JSON.parse错误未定义

我试图parsing节点中的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 } 

readFileasynchronous的 ,因此在为content赋值之前调用JSON.parse行,因此content的默认值为undefined

你有两个select:

  1. 将使用数据的逻辑移入callback。

     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); }); 
  2. 使用readFile的同步版本(即readFileSync )。

     // ... content = fs.readFileSync('./config/db.json'); var config = JSON.parse(content); // ... 

当您尝试parsing它时, content等于undefined 。 你应该在readFilecallback中parsing你的JSON数据,或者使用readFileSync来代替。

另外,你也许不应该从callback中抛出。

这导致我认为你对node.js的工作原理有一些误解,我强烈build议你阅读它