2013-01-16 85 views
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調用的限制。

//以下函數以美元返回通用股票信息。這包括高,低和音量...

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的代碼。希望這可以幫助。

+0

TypeError:無法調用未定義的方法'apply' 引用監聽器[i] - 您應該發佈該代碼段,我們不知道是什麼類型的對象或函數。 – Morgan

+0

你能告訴我們一些你的代碼嗎?某處你綁定了一個事件處理程序,該處理程序是'null'而不是'function',所以當它試圖運行該函數時,它會崩潰。 – loganfsmyth

回答

2

我不知道什麼是您的要求功能,但如果它是一個快捷方式http.request,你應該記住的是,在響應到達塊。你不知道你是否能到資源以相同的速度寫成響應得到大塊所以你應該APIResponder.respond管水庫的響應:res.pipe(響應),也可以手動把這個:

response.on('data',function(data){ 
    var flushed = res.write(data); 
    if(!flushed) response.pause(); 
}) 
res.on('drain',function(){ 
    response.resume(); 
})