在NodeJS中的get请求中有以下代码
response.on('data', function (chunk) {
console.log(chunk);
JSON.parse(chunk);
console.log("ch"+chunk.product.productId);
responseData+=chunk;
});第一个console.log输出整个响应,这是一个字符串形式的JSON:
{"product":[{"defaultProductUrl":"http:\/\/www.zappos.com\/product\/7306789","defaultImageUrl":"http:\/\/www.zappos.com\/images\/z\/2\/1\/3\/2\/5\/4\/2132548-p-DETAILED.jpg","productId":"7306789","productName":"Pro Short","brandId":"1630","brandName":"CW-X"}],"statusCode":"200"}然而,第二个错误引发了一个错误:
console.log("ch"+chunk.product.productId);
TypeError: Cannot read property 'productId' of undefined
at IncomingMessage.<anonymous> (c:\Users\Udai\Desktop\Zappos\server.js:78:38)
at IncomingMessage.EventEmitter.emit (events.js:95:17)
at IncomingMessage.<anonymous> (_stream_readable.js:746:14)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at IncomingMessage.Readable.push (_stream_readable.js:127:10)
at HTTPParser.parserOnBody [as onBody] (http.js:141:22)
at Socket.socketOnData [as ondata] (http.js:1584:20)对发生了什么有什么想法吗?
发布于 2014-02-20 05:23:28
在一个可读的流中,可以并且经常存在不止一个chunk of 'data'。您需要确保拥有所有这些数据(即使只有1),并在到达'end'后执行处理。
var body = '';
response.on('data', function (chunk) {
body += chunk.toString();
});
response.on('end', function () {
// ...
});您还需要存储JSON.parse()的结果,因为它不会更改其参数。
var data = JSON.parse(body);然后,从JSON中的[...]中,data.product将是Object的Array,因此,您必须访问它的索引才能检索productId。
console.log(data.product[0].productId);发布于 2014-02-20 05:22:31
在运行JSON.parse之前,您需要积累所有的数据。也就是说,继续在responseData += chunk中积累块,然后运行JSON.parse。否则,您可以在一个字符串上运行JSON.parse,比如:{"prop":,后面跟着另一个块:"value"}。这两个都不是有效的JSON:
response.on("end", function () {
console.log(JSON.parse(responseData));
});https://stackoverflow.com/questions/21898764
复制相似问题