2017-08-05 9 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変数を正しく呼び出す方法を教えてください。

あなたの返事をよろしくお願いします!そして、あなたはここでvar tick = kraken.getQuote();

を呼び出すgetQuote買いを呼び出すことができるようになる、それをインポートして、あなたはこのvar kraken = require("./kraken")()

ようにそれを含める必要がありますgetQuote使用するためには

答えて

1

は、実施例

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!') 
}); 
です

編集:私は自分のパスが./krakenなのでlocalyを使用していますので、デフォルトのパスをファイルに使用する必要があります

+0

これを実行した後、別のエラー「ReferenceError:publicClient is not defined」が発生しましたが、これは別の問題です –

+0

Thx。私は上記の 'publicClient'メソッドを追加しました。しかし、私は出力として 'undefined'しか得られず、価格データも得られません。なにか提案を? – mrquad

+1

上記の例では、 'public_client'は今では定義されていません。また、後で 'KrakenClient'の作成とAPI呼び出しが含まれるので、手動でデバッグする必要があると思います –

関連する問題