6
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与我正在使用的插件兼容。

另外,我的版本背景:Node is v0.8.2

4

3 回答 3

3

您准备了一个请求对象,但没有使用 .end() 触发它。(回调也不能那样工作。)

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

于 2013-02-12T22:33:38.407 回答
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() 之前不会发送您的请求

于 2013-02-12T22:35:02.050 回答
0

这里有几件事:

  • 使用hostnamehost兼容url.parse()请参阅此处
  • request 的回调接受一个参数,它是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();
于 2013-02-12T22:40:30.590 回答