2013-10-25 23 views
13

Sử dụng kiểu gốc http.get() trong Node.js, tôi đang cố gắng trả lời HTTP cho luồng mà tôi có thể ràng buộc các sự kiện dataend.Dòng phản hồi HTTP Node.js

tôi đang xử lý này cho dữ liệu gzip, sử dụng:

http.get(url, function(res) { 
    if (res.headers['content-encoding'] == 'gzip') { 
    res.pipe(gunzip); 
    gunzip.on('data', dataCallback); 
    gunzip.on('end', endCallback); 
    } 
}); 

gunzip là một dòng suối và điều này chỉ hoạt động. Tôi đã cố gắng để tạo ra các dòng (viết luồng, sau đó đọc suối) và đường ống phản ứng, nhưng đã không có nhiều may mắn. Bất kỳ đề xuất nào để sao chép cùng một giao dịch này, đối với nội dung không được nén?

+0

Tôi đang cố gắng để có được cơ thể phản ứng như nó đến, sau đó khi nó kết thúc. Tôi nghĩ rằng tôi có thể làm 'res.on ('dữ liệu')' nhưng điều đó dường như không bao giờ kích hoạt. – dzm

Trả lời

20

Đối tượng phản hồi từ yêu cầu HTTP là một thể hiện của luồng có thể đọc được. Do đó, bạn sẽ thu thập dữ liệu với sự kiện data, sau đó sử dụng sự kiện khi sự kiện end kích hoạt.

var http = require('http'); 
var body = ''; 

http.get(url, function(res) { 
    res.on('data', function(chunk) { 
    body += chunk; 
    }); 
    res.on('end', function() { 
    // all data has been downloaded 
    }); 
}); 

Các readable.pipe(dest) về cơ bản sẽ làm điều tương tự, nếu body trong ví dụ trên là một dòng ghi.

+1

Doh, hóa ra là do http không theo dõi chuyển hướng. Mã của bạn là những gì tôi có và nó hoạt động tốt, ngoại trừ các chuyển hướng. Tôi đã kiểm tra npm 'follow-redirects' và sẽ kiểm tra nó. – dzm

+0

Bạn cũng có thể thử mô-đun 'yêu cầu 'phổ biến, mà cũng theo các chuyển hướng – vkurchatkin

+0

@vkurchatkin' yêu cầu' hỗ trợ nội dung gzipped – dzm

Các vấn đề liên quan