节点js,http请求,解析结果错误

时间:2015-10-26 16:50:33

标签: javascript json node.js

从外部api获取数据:

var request = http.get('http:...format=json', function(resFromApi) {
  if(resFromApi.statusCode !== 200){
    res.status(400).send(data);
    return;
  }
  resFromApi.on('data', function(data) {
    var test = JSON.parse(data);
    res.status(200).send(data); 
  });
});
request.end();

我使用rest api来使用此服务。如果我在浏览器中运行它,结果将作为文件返回,其中包含json数据。如果我尝试运行JSON.parse(data),控制台会给出:

SyntaxError: Unexpected token i
    at Object.parse (native)
    at IncomingMessage.<anonymous> (/Library/WebServer/Documents/VF/node/server.js:58:25)
    at IncomingMessage.emit (events.js:95:17)
    at IncomingMessage.<anonymous> (_stream_readable.js:764:14)
    at IncomingMessage.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:426:10)
    at emitReadable (_stream_readable.js:422: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)

如果我在我的浏览器中直接粘贴api-url,json数据会按预期显示。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

data事件将返回 chunked 数据,根据数据与缓冲区大小的不同,这些数据通常只包含部分完整响应(因此{{1挥舞着摇摇晃晃)。

在您的情况下,JSON.parse调用似乎是多余的,因为您只是尝试将数据从一个请求复制到另一个请求。在这种情况下,您可以简单地将pipe数据放入目标流

JSON.parse