2017-08-05 61 views
0

我已经编写了以下API包装并希望将其输出为快速视图。从API获取数据并将其输出为快速视图

我的API调用的文件exchanges.js我用下面的函数来getQuotes

module.exports = function container(get, set, clear) { 

    function publicClient() { 
    if (!public_client) { 
     public_client = new KrakenClient() 
    } 
    return public_client 
    } 


    var exchange = { 
    name: 'kraken', 
    historyScan: 'forward', 
    makerFee: 0.16, 
    takerFee: 0.26, 
    // The limit for the public API is not documented, 1750 ms between getTrades in backfilling seems to do the trick to omit warning messages. 
    backfillRateLimit: 1750, 

    getQuote: function(opts, cb) { 
     var args = [].slice.call(arguments) 
     var client = publicClient() 
     var pair = joinProduct(opts.product_id) 
     client.api('Ticker', { 
     pair: pair 
     }, function(error, data) { 
     if (error) { 
      if (error.message.match(recoverableErrors)) { 
      return retry('getQuote', args, error) 
      } 
      console.error(('\ngetQuote error:').red) 
      console.error(error) 
      return cb(error) 
     } 
     if (data.error.length) { 
      return cb(data.error.join(',')) 
     } 
     cb(null, { 
      bid: data.result[pair].b[0], 
      ask: data.result[pair].a[0], 
     }) 
     }) 
    }, 

    } 
    return exchange 
} 

我试图通过快速通道调用getQuotes - ticker.js

var express = require('express'); 
var router = express.Router(); 
var kraken = require("../exchanges/kraken/exchange") 

router.get('/', function(req, res, next) { 
    var tick = kraken.exchange.getQuote; 
    res.send('get ticker: ' + tick); 
}); 

module.exports = router; 

然而,当打开路由时,我收到以下错误消息:

Cannot read property 'getQuote' of undefined

TypeError: Cannot read property 'getQuote' of undefined at /home/ubuntu/workspace/nodejs/routes/ticker.js:7:31 at Layer.handle [as handle_request] (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/layer.js:95:5) at next (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/layer.js:95:5) at /home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:281:22 at Function.process_params (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:335:12) at next (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:275:10) at Function.handle (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:174:3) at router (/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:47:12)

任何建议如何正确调用getQuotes变量?

感谢您的回复!

回答

1

为了导入和使用getQuote,你将需要包括像这样var kraken = require("./kraken")()

,那么你就可以打电话getQuote买调用var tick = kraken.getQuote();

这里是一个工作示例

var express = require('express'); 
var app  = express(); 
var kraken = require("./kraken")() 

app.get('/', function(req, res, next) { 
    var tick = kraken.getQuote(); 
    res.send('get ticker: ' + tick); 
}); 


app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}); 

编辑:我一直在工作localy所以我的路径是./kraken你仍然应该使用你的默认路径文件

+0

运行后,我得到了单独的错误'ReferenceError:publicClient未定义',但这是一个不同的问题 –

+0

Thx。我添加了上面的'publicClient'方法。但是,我只能得到'未定义'的输出并且没有定价数据。任何建议? – mrquad

+1

上例中'public_client'现在没有定义。此外,它还包括稍后创建'KrakenClient'和API调用,所以我认为您需要手动调试它 –

相关问题