2013-03-25 39 views
1

这可能会因运行在railwayjs控制器内部而变得复杂(还没有移动到复合),不要这么认为,不要认为这里有任何东西铁路干扰。node.js http.get chunk没有正确返回结构

我有以下几点:

var http = require('follow-redirects').http; 
var https = require('follow-redirects').https; 
action('index', function (req,res) { 
    var url = decodeURIComponent(request.query.url); 
    var resobj; 
    var stat; 
    var headers; 
    http.get(url, function (r) { 
     stat = r.statusCode; 
     headers = r.headers; 
    r.on('data', function (chunk) { 
      resobj += chunk.toString(); 
     }); 
     r.on('end', responder); 
    }); 
    function responder(){ 
    response.writeHead(200, { 
      'Content-Type': headers["content-type"] 
     }) 
     response.write(resobj); 
     response.end(); 
    } 

}); 

request.query.url是铁路,也可能来自快递底层,无论如何它正确返回。然而,每当我在各种网站运行此我有两个问题

  1. 未定义的文本出来之前别的,例如文档类型声明之前。

  2. 块的结构似乎是关闭的,导致浏览器修复html(可能是由'undefined'字符串引起的),这种修复意味着元素通常在头部呈现时最终呈现在主体中,

有关解决这个任何想法 - 也如果有人能告诉我该怎么做上面的代码,以便与节点之一phantomjs桥梁这将是很好,我可以得到至少一样好结果。

+0

我应该指定该不确定是不是在我已经测试过的网页的第一块发现的最简单的方法。那些我测试过的是www.metafilter.com,www.google.com,www.cnn.com,www.balloon-juice.com – user254694 2013-03-25 19:13:20

回答

0

这个问题是大约一岁,但我登陆它试图解决类似的问题。节点在流中处理这些响应以保持其足迹低。要求节点缓冲它们并试图连接卡盘比完成工作要多得多。我发现,使用mikeal的请求包是处理响应“身体” https://github.com/mikeal/request

var request = require('request'); 
request('http://www.google.com', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(body) // Print the google web page. 
    } 
})