1

mtgox サーバーにクエリを実行しています。これが API https://en.bitcoin.it/wiki/MtGox/API/HTTP/v1です。私のコードはサーバーに正常にヒットしましたが、数回後にこのエラーが表示されます。

events.js:115
      listeners[i].apply(this, args);
                   ^
TypeError: Cannot call method 'apply' of undefined
    at EncryptedStream.EventEmitter.emit (events.js:115:20)
    at SecurePair.destroy (tls.js:896:22)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

これは API 呼び出しの制限によるものではないと確信しています。

//次の関数は、一般的なティッカー情報を USD で返します。これには、高、低、および音量が含まれます...

exports.market_data = function(req, res, next){
  console.log("test");
  options = {
    uri: 'http://mtgox.com/api/1/BTCUSD/ticker',
    headers: {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/555.55 (KHTML, like Gecko) Chrome/55.5.5555.55 Safari/555.55'
    }
  };
  try {
    request(options, function (err, response, body) {
      // console.log(body);
      APIResponder.respond(res, response);
    });
  } catch(err) {
      console.log(err);
      console.log("Gangnam style");
    throw err;
  }
};

遅れてすみません、インターネットは死にました。MTGox をクエリするコードは次のとおりです。お役に立てれば。

4

1 に答える 1

2

リクエストの機能はわかりませんが、それがhttp.requestのショートカットである場合は、レスポンスがチャンクで到着することに注意してください。応答がチャンクを取得するのと同じ速度でresに書き込むことができるかどうかわからないため、APIResponder.respond は応答を res: res.pipe(response) にパイプする必要があります。または、これを手動で処理することもできます。

response.on('data',function(data){
    var flushed = res.write(data);
    if(!flushed) response.pause();
})
res.on('drain',function(){
    response.resume();
})
于 2013-01-16T23:39:02.970 に答える