2012-03-28 2 views
0

Я пытаюсь сделать функцию, которая возвращает содержимое веб-страницы, и это то, что я до сих порNode.js http.get как функция

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() в любом месте. На консоли он просто не отвечает.

Благодаря

ответ

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) 
+0

не работает. Распечатывает данные на консоли, но не передает их. – Kartik

+1

node.js является асинхронным. Вы должны использовать событие или обратный вызов, чтобы получить результат своей функции. – Vodun

+0

+1 для @Vodun. Узел работает с функциями обратного вызова, а не с возвратами. Пожалуйста, см. [Это видео] (http://www.youtube.com/watch?v=jo_B4LTHi3I), чтобы получить представление об основных различиях между узлами и некоторыми традиционными языками. –

2

Короткий ответ: Вы не можете вернуть данные из этой функции. http.get является асинхронным, поэтому он фактически не запускает обратный вызов до завершения вашей функции. Вам нужно, чтобы ваша функция get_contents выполняла обратный вызов, проверьте обработчик http.get, выполнили ли вы загрузку и, если хотите, вызовите обратный вызов get_contents.

+0

каким-либо образом вы можете предоставить код для этого? – Kartik

+1

@Kartik: На самом деле это ответ Водуна. Видимо, он писал код, пока я описывал, что он сделал. – Chuck

1

Узел awesome [request][1] доступен в node.js.

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/