【问题标题】:Getting HTTP Response using restler in Node.js在 Node.js 中使用 restler 获取 HTTP 响应
【发布时间】:2013-07-10 06:57:37
【问题描述】:

我不明白为什么这段代码对我不起作用

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') 的回复

我是不是缺少restler的东西?

【问题讨论】:

  • 你试过getResp('http://google.com')吗?
  • 某事.. 我得到''

标签: javascript node.js httpresponse restler


【解决方案1】:

由于您正在返回 resp,您似乎忘记了请求是异步的。不如试试这个:

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" ....

由于它的异步特性,最好将值传递给接收回调。举个小例子:

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();
}

一旦数据传入,您就可以像传递任何其他变量一样传递它。

【讨论】:

  • 之后如何在变量中获取它?
  • @NickGinanto 我添加了一个如何传递响应的示例。
【解决方案2】:

return resp; 在调用 on('complete' 回调之前运行,因为它是异步的。这导致resp 变量永远不会被赋值。

试试这个:

var rest = require('restler');

var getResp = function(url){
  var result = rest.get(url).on('complete', function(response){
   response;
  });
  return result;
};

getResp('http://google.com/');

您也可以使用this SO answer 中的回调。

【讨论】:

  • 你不是说return result吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多