Node.js http.get作为函数

时间:2012-03-28 07:32:22

标签: javascript node.js

我正在尝试创建一个返回网页内容的函数,这是我到目前为止所拥有的

var get_contents = function() {
    var httpRequestParams = 
    {
        host: "google.com",
        port: 80,
        path: "/?"
    };

    var req = http.get(httpRequestParams, function(res) 
    {
        var data = '';
        res.on('data', function(chunk) {
            data += chunk.toString();
        });
        //console.log(data);
    }).end();

    return req;
}

当我运行此代码时,我会在控制台日志记录打开时看到html内容,但是当我尝试返回输出时,它就永远无法正常工作。

我无法想办法在任何地方返回get_contents()。在控制台上,它只是没有响应。

由于

3 个答案:

答案 0 :(得分:5)

类似的东西:(别忘了处理错误和超时)

var on_contents = function(cb) {
    var httpRequestParams = 
    {
        host: "google.com",
        port: 80,
        path: "/?"
    };

    var req = http.get(httpRequestParams, function(res) 
    {
        var data = '';
        res.on('data', function(chunk) {
            data += chunk.toString();
        });

        res.on('end', function(){
            cb(data);
        });

        //console.log(data);
    }).end();

}

function onFinish(data) {
    console.log(data);

}

on_contents(onFinish)

答案 1 :(得分:2)

简短的回答是:您无法从该功能返回数据。 http.get是异步的,因此在函数结束之前它实际上不会开始运行回调。您需要让get_contents函数自行回调,检查http.get处理程序是否已完成加载,如果是,请调用get_contents回调。

答案 2 :(得分:1)

node.js中有一个很棒的模块[request][1]

var request = require('request'),
    url = require('url');

var server = http.createServer(function (request, response) {
    getPage("http://isohunt.com/torrents/?iht=-1&ihq=life+is+beautiful", function (body) {

        console.log(body);           
    })
});
server.listen(3000);

可在http://www.catonmat.net/blog/nodejs-modules-request/

上找到更多信息