在Node.js中发送带有参数的http get请求

时间:2015-04-14 00:39:29

标签: node.js httprequest

我正在尝试从Node.js应用程序向Rails服务器发送GET请求。目前,我正在使用request模块:

var request = require("request");
var url = 'www.example.com'

function sendRequest(url){
  string = 'http://localhost:3000/my-api-controller?url=' + url;
  request.get(string, function(error, response, body){
    console.log(body);
  });
}

这很有效。但我想要的不是为string请求构建get,而是将请求的参数作为javascript对象传递(以类似jQuery的方式)。 request模块的wiki页面上有one example,它使用了这种语法:

request.get('http://some.server.com/', {
  'auth': {
    'user': 'username',
    'pass': 'password',
    'sendImmediately': false
  }
});

然而,当我尝试为我的目的调整这种语法时:

function sendRequest(url){
  request.get('http://localhost:3000/my-api-controller', {url: url}, function(error, response, body){
    console.log(body);
  });
}

url参数未被发送。

所以我的问题是,我在这里做错了还是request模块不支持将get请求的参数作为javascript对象传递?如果没有,你能建议一个方便的Node模块吗?

2 个答案:

答案 0 :(得分:5)

" HTTP身份验证"您在request模块中指向的示例不构建查询字符串,它会根据特定选项添加身份验证标头。该页面的another part描述了您想要的内容:

request.get({url: "http://localhost:3000/my-api-controller", 
             qs: {url: url}},
            function(error, response, body){
               console.log(body);
            });

这样的事情。反过来,这会使用querystring模块来构建查询字符串,如评论中所述。

答案 1 :(得分:5)

提供给request()或其convenience methods的对象不仅适用于数据参数。

要在查询字符串中提供{ url: url },您需要使用qs选项。

request.get('http://localhost:3000/my-api-controller', {
    qs: { url: url }
}, function(error, response, body){
    // ...
});