c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

node.jsでJSONをHTTPで取ってくる簡易method

http.js
http.getJson(url, callback)

/**
 * Extends standard http module.
 *
 * @author ne_Sachirou <utakata.c4se@gmail.com>
 * @license Public Domain
 * @module http
 */

'use strict';

var http = require('http');

/**
 * Wrapper for http.get() to get JSON resource.
 *
 * @example
 * var http = require('./http.js');
 * http.getJson('http://example.com/?format=json', function(error, data) {
 *   if (error) { console.log(error.stack); return; }
 *   // Process data here.
 * });
 *
 * @static
 * @param {string|Object} url
 * @param {function(?Error,?Object)} callback function(?Error,?Object)
 */
function getJson(url, callback) {
  var origCallback, req, error = null;

  origCallback = callback || function() { };
  callback = function(error, data) {
    origCallback(error, data);
    callback = function() { };
  };
  req = http.get(url, function(res) {
    var chunks = [ ];

    if (res.statusCode !== 200 && res.statusCode !== 0) {
      error = new Error(res.statusCode);
    }
    res.setEncoding('utf8');
    res.on('data', function(chunk) { chunks.push(chunk); });
    res.on('end', function() {
      var data = chunks.join('');

      try {
        data = JSON.parse(data);
      } catch (err) {
        error = err;
      }
      if (data && data.error) { error = new Error(data.error); }
      if (error) { callback(error, data); return; }
      callback(null, data);
    });
  });
  req.on('error', function(error) { callback(error, null); });
  req.setTimeout(10 * 1000, function() {
    req.abort();
    callback(error || new Error('Request timeout.'), null);
  });
}

http.getJson = getJson;
module.exports = http;