2015-01-30 17 views
6

Otrzymuję następujący błąd po uruchomieniu skryptu node.js, próbowałem zbadać dużo, dodając metodę console.log() do śledzenia błędu, ale nie mogłem znaleźć żadnego rozwiązania. [Uwaga: Mam również szukał innego rozwiązania StackOverflow ale nic z tego nie pomogło]Node.js undefined: 1 [SyntaxError: nieoczekiwany koniec wejścia]

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) 

Oto mój kod:

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

Kiedy zadzwonić do API za pomocą polecenia curl, otrzymuję poniżej ważnego json odpowiedź:

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

Odpowiedz

16

data zwrotna jest wywoływana wiele razy z kawałkami odpowiedzi. Przy każdym wywołaniu zwrotnym należy dołączyć odpowiedź do ciągu znaków, a następnie do end, kiedy parsujesz.

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

Pozwól mi wypróbować Twoje rozwiązanie –

+0

Dziękuję bardzo. Twoje rozwiązanie uratowało mi życie: D –

+0

Dziękuję bardzo, że zadziałało !!! –

0

Przede wszystkim Dziękuję Ben za poprawną analizę przyczyny źródłowej. Próbowałem rozwiązania zaproponowanego przez Bena, ale ponieważ moje dane odpowiedzi były tak ogromne, zaczęło mi się "błąd zawieszenia gniazda". Więc muszę zaprojektować rozwiązanie przy użyciu node.js żądania modułu

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

Dla mnie kiedy otrzymuję ten błąd:

undefined:1 
[ 

to dlatego, że plik jest zapisany jako .json:

8 -bitowe BOM unikod, Win (CRLF) zamiast: 8-bitowy kod Unicode, Win (CRLF)

to musi być później dla mnie!

PÓźNE

Powiązane problemy