2013-03-04 179 views
5

我試圖解析節點 中的json文件,但總是有錯誤 ,我谷歌它,但無法解決它。 你能幫我嗎?Node.JS JSON.parse錯誤undefined

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異步,所以你把值賦給content之前,所以contentundefined它的默認值您JSON.parse線被調用。

你有兩個選擇:

  1. 移動使用數據回調的邏輯。

    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); 
    // ... 
    
+0

由於它work..I是新的JS。 – 2013-03-04 10:55:55

0

content當您嘗試解析它等於undefined。 您應該在readFile回調中解析您的JSON數據,或使用readFileSync代替。

另外,你也許不應該從回調中拋出。

這使我認爲你有怎樣的Node.js作品一些誤解,我強烈建議你閱讀this