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 }
readFile
是asynchronous的 ,因此在为content
赋值之前调用JSON.parse
行,因此content
的默认值为undefined
。
你有两个select:
-
将使用数据的逻辑移入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); });
-
使用
readFile
的同步版本(即readFileSync
)。// ... content = fs.readFileSync('./config/db.json'); var config = JSON.parse(content); // ...
当您尝试parsing它时, content
等于undefined
。 你应该在readFile
callback中parsing你的JSON数据,或者使用readFileSync
来代替。
另外,你也许不应该从callback中抛出。
这导致我认为你对node.js的工作原理有一些误解,我强烈build议你阅读它