Node.JS JSON.parse 错误未定义
Posted
技术标签:
【中文标题】Node.JS JSON.parse 错误未定义【英文标题】:Node.JS JSON.parse error undefined 【发布时间】:2013-02-18 09:29:12 【问题描述】:我试图解析节点中的 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
【问题讨论】:
【参考方案1】: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);
// ...
【讨论】:
【参考方案2】:content
等于 undefined
当您尝试解析它时。
您应该在 readFile
回调中解析您的 JSON 数据,或者改用 readFileSync
。
此外,您可能不应该从回调中抛出。
这让我觉得你对 node.js 的工作方式有一些误解,我强烈建议你阅读this
【讨论】:
以上是关于Node.JS JSON.parse 错误未定义的主要内容,如果未能解决你的问题,请参考以下文章