最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Node.js http.get as a function - Stack Overflow

programmeradmin6浏览0评论

I am trying to make a function that returns the content of the webpage and this is what I have so far

var get_contents = function() {
    var httpRequestParams = 
    {
        host: "google",
        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;
}

This when I run this code, I see the html contents when the console logging is turned on but when I try to return the output, it just never works.

I can't figure out a way to return get_contents() anywhere. On the console, it just doesnt respond.

Thanks

I am trying to make a function that returns the content of the webpage and this is what I have so far

var get_contents = function() {
    var httpRequestParams = 
    {
        host: "google.",
        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;
}

This when I run this code, I see the html contents when the console logging is turned on but when I try to return the output, it just never works.

I can't figure out a way to return get_contents() anywhere. On the console, it just doesnt respond.

Thanks

Share Improve this question asked Mar 28, 2012 at 7:32 KartikKartik 9,8919 gold badges49 silver badges52 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

Something like that: (dont forget to handle error and timeout)

var on_contents = function(cb) {
    var httpRequestParams = 
    {
        host: "google.",
        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)

The short answer is: You can't return the data from that function. http.get is asynchronous, so it doesn't actually start running the callback until after your function ends. You'll need to have your get_contents function take a callback itself, check in the http.get handler whether you're done loading and, if you are, call the get_contents callback.

There is an awesome module [request][1] available in node.js.

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

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

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

More information can be found on http://www.catonmat/blog/nodejs-modules-request/

发布评论

评论列表(0)

  1. 暂无评论