2013-03-04 17 views
5

ノード のjsonファイルを解析しようとしましたが、常にエラー がありますが、解決できません。 私を助けることができますか?Node.JS JSON.parseエラーが定義されていません

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 
} 

答えて

6

readFile非同期あるので、あなたのJSON.parseラインは、あなたがcontentに値を割り当てる前に呼び出され、そのためcontentundefinedのデフォルト値を持っています。

  1. 移動データコールバックにを用いた論理:

    は、2つのオプションがあります。

    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. readFileSyncある)readFileの同期バージョンを使用。

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

jsのための新しいですwork..Iおかげでそれを読むことをお勧めしますことを考えるように私をリード。 –

0

contentあなたはそれを解析しようとすると、undefinedに等しいです。 readFileコールバックでJSONデータを解析するか、代わりにreadFileSyncを使用してください。

また、おそらくコールバックからスローしないでください。

これは、あなたが作品をNode.jsの方法のいくつかの誤解があると私は強くあなたがthis

関連する問題