408 NodeJS应用程序中的超时请求Github API

时间:2014-03-31 23:10:34

标签: node.js http https github-api

documentation of the Github API之后为NodeJS应用创建授权。

我有以下代码:

var _options = {
  headers: {
    'User-Agent': app.get('ORGANISATION')
  },
  hostname: 'api.github.com'
};

var oauth2Authorize = function () {
  var path = '/authorizations?scopes=repo';
  path +=    '&client_id='+ app.get('GITHUB_CLIENT_ID');
  path +=    '&client_secret='+ app.get('GITHUB_CLIENT_SECRET');
  path +=    '&note=ReviewerAssistant';

  _options.path = path;
  _options.method = 'POST';

  var request = https.request(_options, function (response) {
    var data = "";

    response.on('data', function (chunk) {
      data += chunk;
    });

    response.on('end', function () {
      console.log(data);
    });
  });

  request.on('error', function (error) {
    console.log('Problem with request: '+ error);
  });
};

我得到的只是:

408 Request Time-out
Your browser didn't send a complete request in time.

执行GET请求有效。

1 个答案:

答案 0 :(得分:4)

http.request() doesn't immediately send the request

  

使用http.request(),必须始终致电req.end()以表示您已完成请求 - 即使没有数据写入请求正文。

它会打开与服务器的基础连接,但保留request不完整,以便可以随身携带正文/消息:

var request = http.request({ method: 'POST', ... });

request.write('data\n');
request.write('data\n');
request.end();

而且,无论是否有write()的任何内容,您都必须致电end()完成request并完整发送。没有它,服务器最终会强制关闭打开的连接。在这种情况下,使用408响应。