2013-03-04 29 views
5

Próbowałem przeanalizować plik json w węźle , ale zawsze wystąpił błąd i google go, ale nie mogę go rozwiązać. Czy możesz mi pomóc?Node.JS Błąd JSON.parse nieokreślony

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) 

to jest mój kod

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

i db.json jest to. Jak widać, nie ma błędów.

{ 
    "left": 3 
} 

Odpowiedz

6

readFile jest asynchroniczny, więc linia JSON.parse nazywa zanim przypisać wartość content, a więc content ma swoją wartość domyślną undefined.

Masz dwie opcje:

  1. Przenieś logiki wykorzystaniem danych do zwrotnego.

    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. pomocą synchronicznego wersję readFile (który readFileSync).

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

podzięki To work..I jestem nowy na js. –

0

content jest równa undefined podczas próby je analizować. Należy przeanalizować dane JSON w wywołaniu zwrotnym readFile lub użyć readFileSync.

Powinieneś również nie rzucać oddzwonienia.

To prowadzi mnie do myślenia, że ​​masz jakieś błędne wyobrażenia o tym, jak node.js prace i gorąco polecam lekturę this

Powiązane problemy