在Node.js中使用restler获取HTTP响应

我不明白为什么这个代码不适合我

var rest = require('restler'); var getResp = function(url){ var resp =""; rest.get(url).on('complete',function(response){ resp = response.toString(); }); return resp; }; 

我没有得到getResp('google.com')的回应

我是否缺less与restler的东西?

因为你正在返回resp它看起来像你忘记了这个请求是asynchronous的。 相反,试试这个:

 var rest = require('restler'); var getResp = function(url){ rest.get(url).on('complete', function(response){ console.log(response); }); }; getResp('http://google.com/'); // output: // <!doctype html><html itemscope="itemscope" .... 

由于其asynchronous性质,最好将值传递给接收callback。 以这个小例子:

 var rest = require('restler'); // process an array of URLs ['http://google.com/', 'http://facebook.com/'].forEach(function(item) { getResp(item); }); function getResp(url){ rest.get(url).on('complete', function(response){ processResponse(response); }); }; // data will be a Buffer function processResponse(data) { // converting Buffers to strings is expensive, so I prefer // to do it explicitely when required var str = data.toString(); } 

数据一旦进入,您就可以像其他variables一样传递数据。

return resp;on('complete'callback被调用之前,因为它是asynchronous的,所以运行结果是respvariables永远不会被分配一个值。

尝试这个:

 var rest = require('restler'); var getResp = function(url){ var result = rest.get(url).on('complete', function(response){ response; }); return result; }; getResp('http://google.com/'); 

你也可以使用像这样的回答中的callback。