[Node.js] http.request で [Error: socket hang up] code: ‘ECONNRESET’

Node.js で HTTPS リクエストを生成するコードで [Error: socket hang up] code: ‘ECONNRESET’ というエラーが発生しました。

エラーメッセージ

Error: socket hang up
    at createHangUpError (http.js:1124:15)
    at Socket.socketOnEnd [as onend] (http.js:1272:23)
    at TCP.onread (net.js:389:26)

HTTPS リクエストを送るのに、https モジュールじゃなく http モジュールを使っていたのが原因でした…

なので、下記のようにちゃんと https モジュールを使えばOKです。

var https = require('https');
 
/**
 * HTTPS POST (JSON)
 *
 * @param {Object} jsonData
 * @param {Function} callback
 * @param {String} encoding
 */
function httpJsonPost(jsonData, callback, encoding) {
  jsonData = jsonData || {};
  encoding = encoding || 'utf8';
 
  var jsonDataString = JSON.stringify(jsonData);
 
  var headers = {
    'Content-Type': 'application/json',
    'Content-Length': jsonDataString.length
  };
 
  var options = {
    host: 'api.example.com',
    port: 443,
    path: '/1/push',
    method: 'POST',
    headers : headers
  };
 
  var req = https.request(options, function(res) {
    res.setEncoding(encoding);
 
    var responseString = '';
 
    res.on('data', function(chunk) {
      responseString += chunk;
    });
 
    res.on('end', function() {
      var resultObject = JSON.parse(responseString);
      return callback(null, resultObject, res.statusCode, JSON.stringify(res.headers));
    });
  });
 
  req.on('error', function(e) {
    return callback(e);
  });
 
  req.write(jsonDataString);
  req.end();
}

[参考情報]

HTTPS Node.js v0.11.2 Manual & Documentation