我可以在req.get中发送http请求吗?

时间:2015-08-10 19:16:31

标签: node.js express

好吧可能是一个奇怪的问题,但通常是你有这样的代码

app.get('/', function(request, response) {
 response.render('pages/index');
});

您使用mongoDB并获取数据库中的相关数据以返回,但如果我想为其他服务进行数据api调用该怎么办?

我正在使用请求库(https://github.com/request/request#streaming

到目前为止,我的代码看起来像这样

request = require('request');
....
....
app.get( '/examplePage', function( request, response ) {
  request("http://www.google.com", function(error, response, body) {
   console.log(body);
  });
});

但我得到一个" TypeError:对象不是一个函数"这很奇怪,因为我只是在github页面上复制并粘贴了作为示例提供的代码。所以我只是将请求更改为request.get(因为默认是GET但我只是明确使用了get方法)但我没有得到回复或者Google HTML没有返回。

所以基本上我甚至不确定我是否允许在app.get方法中使用请求方法调用,我认为可能是问题?

2 个答案:

答案 0 :(得分:2)

request不是您认为app.get函数中的内容。你应该改变它:

request = require('request');
....
....
app.get( '/examplePage', function( req, res) {
  request("http://www.google.com", function(error, r, body) {
   console.log(body);
  });
});

这样您就不会覆盖之前设置的任何变量。当您尝试使用request模块时,它会引用它在app.get调用中收到的请求参数,该调用不是函数。

答案 1 :(得分:2)

您的代码中有两个名为request的对象,请求模块和来自http调用中路由的请求,您可以更新代码类似于:

var request = require('request')
...
app.get('/example', function (req, res) {
  request("http://googl.com", function (err, response, body) {
    console.log(body)
  })
})

同时考虑到resresponse对象不能具有相同的名称,如果这样做,后者将被考虑在内,具体取决于您使用它的上下文。