【问题标题】:Node.js http request not endingNode.js http请求没有结束
【发布时间】:2018-01-19 11:13:35
【问题描述】:

我对 node.js http.request 调用有疑问。我想调用外部 api(在我的情况下为 Openstack api)。请求发送成功并且我得到了响应,但是在收到响应后我的请求没有完成。相反,它等待大约 2 分钟,然后请求结束。当从像 Postman 这样的 REST 客户端执行相同的 REST 调用时,无需等待,一切正常。

这是我的代码,当我在 /auth URL 上执行 GET 请求时调用该函数。

var options = {
    host: 'someIp',
    path: '/auth',
    method: 'GET',
    headers: {
        "Host":"auth.api.someIp",
        "X-Auth-User":"username",
        "X-Auth-Key":"key"
    }
};

var request = http.request(options, function(response){
    var body = ""
    response.on('data', function(data) {
        body += data;
    });
    response.on('end', function() {            
        console.log('response end')
    });
});
request.on('error', function(e) {
    console.log('Problem with request: ' + e.message);
});
request.on('end', function() {
    console.log('request end');
});

request.end();  

这是控制台日志:

响应结束 GET /auth 200 120080ms

我的问题是,为什么当我使用 node.js http.request 时请求没有结束?

【问题讨论】:

  • 例如向“google.com”发出请求,如果它有效,则可能是因为您未指定或无效的标头。
  • 上面的我都试过了,但是一切都一样,还是等了2分钟左右……

标签: javascript node.js http


【解决方案1】:

嗯,试试收听完成事件。

request.on('finish', function() {
    console.log('request end');
});

请求是Incoming Message 的一个实例。

【讨论】:

  • 我已尝试收听关闭和完成事件。关闭时没有任何变化,当我收听完成事件时,它会将输出写入控制台日志,但它仍然等待大约两分钟才能完成。
  • 可能是您的用户名/密钥?
  • 我连接的 api 给了我一个有效的响应,所以这不可能是因为用户名/密钥。所以我得到了所有需要的数据的响应,但请求仍然没有结束。
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2015-01-09
  • 2018-04-03
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多