2017-02-19 2 views
0

https GET 요청에서 불완전한 JSON을받는 Riot-Api Im 호출.Node.js에서 불완전한 JSON 응답 https-module

디버깅 후, 실제로 완료 JSON 객체를 수신하는 https on'data '콜백 임을 미리 실행 (중단 점) 할 때까지 기다리는 것에 따라 깨달았습니다.

let getOptions = function(url) { 
    return { 
    host: 'na.api.pvp.net', 
    port: 443, 
    path: `${url}?api_key=${apiKey}`, 
    method: 'GET' 
    }; 
} 

exports.Call = function(url, callback) { 
    let response = {}; 

    let req = https.request(getOptions(url), function(res) { 
    response.statusCode = res.statusCode; 
    res.on('data', function(data) { 
     response.json = JSON.parse(data); 
     callback(response); 
    }); 
    }); 

    req.on('error', function(err) { 
    response.err = err; 
    callback(response); 
    }); 

    req.end(); 
}; 

중단하지 않고 코드를 실행하거나 나만 오류로 중 하나를 실행 짧은 시간 위반 (나를 위해 평균 API 응답 시간은 200-300ms가) :

JSON.parse(data): Unexpected Token in JSON at position ... 

또는

JSON.parse(data): Unexptected end of JSON Input. 

요청이 완료된 후에 만 ​​'데이터'콜백이 실행되기를 기대합니다. abo를 혼동합니다. 그것을 (인위적으로 지연시키지 않고) 고치는 방법.

+0

같은 도우미 라이브러리를 사용하는 recomment 것이다 어쩌면 응답이 이미 JSON 형식을 가지고 있으며, 그것을 분석 할 필요가 없다? 데이터의'JSON.parse'를 제거하려고 시도하십시오. – Edgar

+0

@Edgar 원시 버퍼를 다시 얻습니다. 그리고 때때로 JSON으로 포맷하는 데 성공합니다. –

답변

0

http.request은 전체 응답을 포함하는 간단한 콜백이 아니며 stream을 반환합니다. 전체 응답을 구문 분석하려면 buffer and concatenate을 사용해야합니다.

난 강력하게 got 또는 request

+0

나무에 대한 숲을 볼 수 없습니다. 고마워요 - 지금 요청을 사용하여 :) –