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

Send an http get request with parameters in Node.js

我正在尝试从 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);
  });
}

这行得通。但我想要的不是为 get 请求构建 string,而是将请求的参数作为 javascript 对象传递(以 jQuery 类方式). request 模块的维基页面上有 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 对象传递?如果没有,您能否推荐一个方便的 No​​de 模块?

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

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

类似的东西。这反过来又使用 querystring 模块来构建查询字符串,如评论中所述。

提供给 request() or its convenience methods 的对象不仅仅用于数据参数。

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

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