2013-03-04 13 views
5

Ich habe versucht, JSON-Datei in Knoten zu analysieren, aber es immer Fehler und ich google es aber kann es nicht lösen. Können Sie mir helfen?Node.JS JSON.parse Fehler 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) 

dies ist mein Code

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); 

und die db.json ist dies. Wie Sie sehen können, gibt es keine Fehler.

{ 
    "left": 3 
} 

Antwort

6

readFile ist asynchrone, so dass Ihre JSON.parse Linie aufgerufen wird, bevor Sie einen Wert content zuweisen und so content hat seinen Standardwert von undefined.

Sie haben zwei Möglichkeiten:

  1. Verschieben Sie die Logik, um die Daten in der Rückruf verwenden.

    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. Verwenden Sie die Synchron-Version von readFile (die readFileSync ist).

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

Dank work..I für js neu bin. –

0

content gleich undefined wenn Sie versuchen, es zu analysieren. Sie sollten Ihre JSON-Daten im readFile Callback analysieren oder stattdessen readFileSync verwenden.

Auch sollten Sie wahrscheinlich nicht von einem Rückruf werfen.

Dies führt mich, dass Sie einige falsche Vorstellungen davon haben, zu denken, wie funktioniert node.js und ich Ihnen dringend empfehlen this lesen es