节点http.request什么都不做

时间:2013-02-12 22:26:50

标签: javascript node.js http

var http = require('http');

var options = {
    method: 'GET',
    host: 'www.google.com',
    port: 80,
    path: '/index.html'
};

http.request(
    options,
    function(err, resBody){
        console.log("hey");
        console.log(resBody);
        if (err) {
            console.log("YOYO");
            return;
        }
    }
);

出于某种原因,这只会超时并且不会将任何内容记录到控制台。

我知道我可以require('request')但我需要使用http与我正在使用的插件兼容。

此外,我的版本背景:节点是 v0.8.2

3 个答案:

答案 0 :(得分:3)

您准备了一个请求对象,但没有用.end()激活它。 (此外回调也不起作用。)

请参阅:http://nodejs.org/api/http.html#http_event_request

答案 1 :(得分:3)

使用此处的示例:http://nodejs.org/api/http.html#http_http_request_options_callback

var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST'
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

回调没有错误参数,你应该使用on(“error”,...) 并且在您致电end()

之前,您的请求不会被发送

答案 2 :(得分:0)

在这里结识:

  • 使用hostname而不是host,以便与url.parse()see here
  • 兼容
  • 请求的回调采用一个http.ClientResponse
  • 参数
  • 要捕获错误,请使用req.on('error', ...)
  • 使用http.request时,您需要在完成req.end()后结束请求,这样您就可以在结束请求之前编写您需要的任何正文(使用req.write()
    • 注意:http.get()会在幕后为您执行此操作,这可能就是您忘记的原因。

工作代码:

var http = require('http');

var options = {
    method: 'GET',
    hostname: 'www.google.com',
    port: 80,
    path: '/index.html'
};

var req = http.request(
    options,
    function(res){
        console.log("hey");
        console.log(res);
    }
);

req.on('error', function(err) {
  console.log('problem', err);
});

req.end();