2013-03-04 19 views
5

Ho provato ad analizzare il file json nel nodo ma c'è sempre l'errore e lo faccio su Google ma non riesco a risolverlo. Potete aiutarmi?Node.JS JSON.parse error 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) 

questo è il mio codice

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

e la db.json è questo. Come puoi vedere, non ci sono errori.

{ 
    "left": 3 
} 

risposta

6

readFile è asincrono, quindi la linea JSON.parse viene chiamato prima di assegnare un valore a content, e così content ha il suo valore predefinito di undefined.

si hanno due opzioni:

  1. Spostare la logica utilizzando i dati in la richiamata.

    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. Utilizzare la versione sincrona di readFile (che è readFileSync).

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

Thanks it work..I sono nuovo per js. –

0

content è uguale a undefined quando si tenta di analizzarlo. È necessario analizzare i dati JSON nella callback readFile o utilizzare readFileSync.

Inoltre, probabilmente non si dovrebbe lanciare da una richiamata.

Questo mi porta a pensare di avere alcune idee sbagliate di come Node.js opere e vi consiglio caldamente di leggere this