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

Getting HTTP Response using restler in Node.js

本文关键字:restler 获取 HTTP 响应 Node js      更新时间:2023-09-26

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

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?

由于返回的是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();
}

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

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/');

您也可以使用类似于此SO应答中的回调。