如何从HTTP Client Node.JS写入响应

时间:2013-07-21 18:58:05

标签: node.js express

我有以下......

var request = require('request');

exports.list = function(req, res){
  res.send("Listing");
};
exports.get = function(req, res){
  request.get("<URL>", function (err, res, body) {
    if (!err) {
      res.send(body,"utf8");
    }
  });
};

这失败了以下......

TypeError: Object #<IncomingMessage> has no method 'send'

我该怎么做?

UPDATE 尝试使用write代替send但是......

/Users/me/Development/htp/routes/property.js:9
  res.setHeader('Content-Type', 'text/html');
      ^
TypeError: Object #<IncomingMessage> has no method 'setHeader'

另外写到控制台也可以正常工作。

3 个答案:

答案 0 :(得分:1)

问题在于变量范围,我的响应输出与我在回调中返回的响应对象的名称相同。改变它(resp vs res)使它工作....

exports.get = function(req, res){
  request.get("<url>", function (err, resp, body) {
    if (!err) {
      res.send(body);
    }
  });
};

答案 1 :(得分:0)

您要做的是提出请求&gt;响应服务器。但是你正在使用Request模块,它允许获取东西而不是响应。

您需要http或更好地获取express.js并使用它,因为它是直接且非常受欢迎的网络框架,可以满足您的需求。

答案 2 :(得分:0)

我不知道OP正在使用Express。如果您尝试将req.send与vanilla HTTP模块而不是Express一起使用,则会遇到类似的错误。

var http = require('http');    
function requestHandler(req, res){
  //res.send(200, '<html></html>'); // not a valid method without express
  res.setHeader('Content-Type', 'text/html');
  res.writeHead(200);
  res.end('<html><body>foo bar</body></html>');
};
http.createServer(handler).listen(3000);