2015-01-30 18 views
6

Ich erhalte den folgenden Fehler, wenn ich das Skript node.js ausführe, habe ich versucht, viel zu untersuchen, indem ich console.log() hinzufüge, um den Fehler zu verfolgen konnte keine Lösung finden. [Anmerkung: Ich habe auch andere Stackoverflow-Lösung aber nichts davon half gesucht]Node.js undefined: 1 [SyntaxError: Unerwartetes Ende der Eingabe]

undefined:1 
    {"ydht":{"status":{"code":200,"message":"OK"},"records":[ 
                ^
SyntaxError: Unexpected end of input 
at Object.parse (native) 
at IncomingMessage.<anonymous> (/tmp/subs_20140130/inc/getData.js:36:24) 
at IncomingMessage.EventEmitter.emit (events.js:95:17) 
at IncomingMessage.<anonymous> (_stream_readable.js:745:14) 
at IncomingMessage.EventEmitter.emit (events.js:92:17) 
at emitReadable_ (_stream_readable.js:407:10) 
at emitReadable (_stream_readable.js:403:5) 
at readableAddChunk (_stream_readable.js:165:9) 
at IncomingMessage.Readable.push (_stream_readable.js:127:10) 
at HTTPParser.parserOnBody [as onBody] (http.js:142:22) 

Hier ist mein Code:

var options = { 
    host: '<my host>', 
    port: 3128, 
    path: 'http://<some host>:4080'+searchQuery, 
    method: 'GET', 
    headers: { 
    'App-Auth': cert 
    } 
}; 
var req = http.request(options, function(res) { 
    res.setEncoding('utf8'); //DEBUG 
    for (var k in options) { console.log("[LOGGING] options :" + k + " = " + options[k]);} //DEBUG 
    res.on('data', function (resData) { 
    var resObj = ""; 
    resObj = JSON.parse(resData); 
    console.log("[LOGGING] Response:: "+resObj);    
    if(resObj.ydht.status.code === 200 && resObj.ydht.records[0].key.length > 0) { 
     console.log("[LOGGING] Email "+em+" Key  "+resObj.ydht.records[0].key);   
     var filePath = basePath + '/setData'; 
     var setd = require(filePath); 
     setd.setMagData(resObj.ydht.records[0].key, ycacert, is_sub); 
    } else { 
     console.log("[LOGGING] Fail to fetch data em  "+em+" nl  "+nl); 
    } 
    }); 
    res.on('end', function() { 
    console.log("[LOGGING] connection closed"); 
    }); 
}); 
req.on('error', function(err) { 
    console.log("[LOGGING] Fail to fetch data em  "+em+" nl  "+nl); 
}); 
req.end(); 

Als ich rufe Sie die api mit curl Befehl, ich habe die unten gültig json erhalten Antwort:

{"ydht":{"status":{"code":200,"message":"OK"},"records":[{"metadata":{"seq_id":"intusnw1-14B3579A577-3","modtime":1422531339,"disk_size":99},"key":"[email protected]","fields":{"em":{"value":"[email protected]"},"is_confirm":{"value":""},"nl":{"value":"offerpop1"}}}],"continuation":{"scan_completed":false,"scan_status":200,"uri_path":"/YDHTWebService/V1/ordered_scan/dts.subs_email?order=asc&start_key=a0"}}} 

Antwort

16

der data Rückruf mehrmals mit Stücken der Antwort genannt wird. Bei jedem Callback müssen Sie die Antwort an eine Zeichenfolge und dann an end anhängen, das ist, wenn Sie es analysieren.

var req = http.request(options, function(res) { 
    res.setEncoding('utf8'); 
    var body = ""; 
    res.on('data', function(resData) { 
     body += resData; 
    }); 
    res.on('end', function() { 
     var json = JSON.parse(body); 
     if (json.ydht.status.code === 200 && json.ydht.records[0].key.length > 0) { 
      var filePath = basePath + '/setData'; 
      var setd = require(filePath); 
      setd.setMagData(json.ydht.records[0].key, ycacert, is_sub); 
     } else { 
      console.log("[LOGGING] Fail to fetch data em  " + em + " nl  " + nl); 
     } 
    }); 
}); 
+0

Lassen Sie mich Ihre Lösung versuchen –

+0

Sie so viel Dank. Ihre Lösung hat mir das Leben gerettet: D –

+0

Vielen Dank, es hat funktioniert !!! –

0

Zunächst einmal Danke Ben für die richtige Ursachenanalyse. Ich habe die von Ben vorgeschlagene Lösung ausprobiert, aber da meine Antwortdaten so riesig waren, fing es an, mir den Fehler "Socket auflegen" zu geben. Also muss ich die Lösung Neugestaltung node.js Anforderungsmodul

//Load the request module (Dont forget to include it in package.json dependency "request": "2.x.x") 
var request = require('request'); 

request('http://xys.com/api', function (error, response, body) { 
    //Check for error 
    if(error){ 
     return console.log('Error:', error); 
    } 

    //Check for right status code 
    if(response.statusCode !== 200){ 
     return console.log('Invalid Status Code Returned:', response.statusCode); 
    } 

    console.log(body); // Here is the response body 

}); 
0

für mich mit, wenn ich diese Fehlermeldung erhalten:

undefined:1 
[ 

Es ist, weil die .json-Datei gespeichert als:

8 -Bit Unicode BOM, Win (CRLF) anstelle von: 8-Bit-Unicode, Win (CRLF)

es muss das spätere für mich sein!

LATE

Verwandte Themen