2013-03-04 2 views
5

노드 에서 json 파일을 구문 분석하려고 시도했지만 항상 오류 오류가 있으며 해결할 수 없습니다. 도와 주시겠습니까?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) 

이 내 코드

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

readFilecontent에 값을 할당하고, 그래서 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. 은 (readFileSync 임) readFile의 동기 버전을 사용한다. 당신이 그것을 구문 분석 할 때

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

JS에 대한 새로운 오전 work..I 감사를 읽을 것을 권장 생각하는 날 리드. –

0

contentundefined 같다. readFile 콜백에서 JSON 데이터를 구문 분석하거나 readFileSync을 대신 사용해야합니다.

또한 콜백을하지 않아야합니다.

이것은 당신이 작품을 Node.js를 방법에 대한 몇 가지 오해를하고 난 강력하게 당신이 this