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 错误未定义的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js、Mongoose 和 Discord.js 的未定义错误 [无法读取未定义的属性]

Node.js 中的错误“未定义窗口”

node.js 中的未定义错误

参考错误事件未定义node.js [重复]

js node.js中的窗口未定义错误

JavaScript、Discord.js、Node.js 类型错误:无法读取未定义的属性“执行”