2017-02-19 102 views
0

调用Riot-Api Im在https GET请求中接收不完整的JSON。Node.js https-module不完整的JSON响应

调试后,我意识到,取决于我等待多少(断点)预先执行https'on'data'回调Im实际上接收完整的JSON对象。

(API平均响应时间对我来说是200-300ms)

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

运行的代码,而断点或只打破了很短的时间我要么运行到错误:

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

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

正如我所期待的'数据'回调只有在请求完成后才能执行im confused abo如何解决它(而不是人为地延迟它)。

+0

也许响应已经JSON格式,也没有必要来分析呢?尝试删除'JSON.parse'的数据 – Edgar

+0

@Edgar我得到一个原始缓冲区,甚至偶尔成功格式化为JSON。 –

回答

0

http.request返回stream - 它不是一个包含整个响应的简单回调。 如果你想解析整个回应,你将不得不去buffer and concatenate

我强烈电子书籍使用一个辅助库像gotrequest

+0

无法看到树木的森林..非常感谢 - 使用请求截至目前:) –