0

I have written the following API wrapper and would like to output it in an express view.

My API calling file is exchanges.js and I use the following function to 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
}

I am trying to call getQuotes via an express route - 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;

However, when opening the route I get the following error message:

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)

Any suggestion how to call the getQuotes variable correctly?

Appreciate your reply!

1 Answer 1

1

In order to import it and use getQuote you will need to include it like this var kraken = require("./kraken")()

then you will be able to to call getQuote buy invoking var tick = kraken.getQuote();

Here is a working example

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

Edit: I have been working localy so my path is ./kraken you should still use your default path to file

Sign up to request clarification or add additional context in comments.

3 Comments

after running this i got separate error ReferenceError: publicClient is not defined but that is a different issue
Thx. I added the publicClient method above. However, I only get as output undefined and no pricing data. Any suggestion?
In example above public_client is not defined now. Also it includes KrakenClient creation later and API call, so I think you will need to debug it manually

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.