2015-01-30 20 views
6

Viene visualizzato il seguente errore quando eseguo lo script node.js, ho cercato di analizzare molto aggiungendo console.log() per tracciare l'errore ma non ho trovato nessuna soluzione. [Nota: Ho cercato anche altra soluzione StackOverflow ma nessuna di queste ha aiutato]Node.js undefined: 1 [SyntaxError: Inaspettato fine dell'input]

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) 

Ecco il mio codice:

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

Quando chiamo l'API utilizzando il comando curl, ho la JSON sotto valida risposta:

{"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"}}} 

risposta

16

la data callback viene chiamato più volte con pezzi di risposta. Su ogni callback è necessario aggiungere la risposta a una stringa e quindi su end, che è quando lo si analizza.

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

mi permetta di provare la soluzione –

+0

Grazie mille. La tua soluzione mi ha salvato la vita: D –

+0

Grazie mille ha funzionato !!! –

0

Prima di tutto Grazie Ben per la corretta analisi delle cause. Ho provato la soluzione proposta da Ben, ma dal momento che i miei dati di risposta erano così grandi, ha iniziato a darmi l'errore "socket hang up". Quindi devo ridisegnare la soluzione utilizzando node.js modulo richiesta

//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

per me quando ottengo questo errore:

undefined:1 
[ 

E 'perché il file viene salvato come .json:

8 bit unicode BOM, Win (CRLF) invece di: 8-bit unicode, Win (CRLF)

ha bisogno di essere il più tardi per me!

LATE

Problemi correlati