Javascript 从API获取数据并在express view中输出

Javascript 从API获取数据并在express view中输出,javascript,node.js,api,Javascript,Node.js,Api,我已经编写了以下API包装器,并希望在express视图中输出它 我的API调用文件是exchanges.js,我使用以下函数来getQuotes: module.exports = function container(get, set, clear) { function publicClient() { if (!public_client) { public_client = new KrakenClient() } return public_

我已经编写了以下API包装器,并希望在express视图中输出它

我的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;
但是,打开路由时,我收到以下错误消息:

无法读取未定义的属性“getQuote”

TypeError:无法读取未定义的属性“getQuote” at/home/ubuntu/workspace/nodejs/routes/ticker.js:7:31 在Layer.handle[作为handle_请求](/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/Layer.js:95:5) 下一步(/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/route.js:137:13) 在Route.dispatch(/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/Route.js:112:3) 在Layer.handle[作为handle_请求](/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 在Function.process_参数(/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:335:12) 接下来(/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:275:10) 在Function.handle(/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:174:3) 在路由器上(/home/ubuntu/workspace/nodejs/node_modules/express/lib/router/index.js:47:12)

有没有关于如何正确调用
getQuotes
变量的建议


感谢您的回复

为了导入它并使用
getQuote
您需要像这样包含它
var kraken=require(“./kraken”)()

然后您将能够调用
getQuote
buy调用
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!')
});

编辑:我一直在本地工作,所以我的路径是
/kraken
,运行此命令后,您仍应使用默认的文件路径

,我收到单独的错误
参考错误:未定义publicClient
,但这是另一个问题。我在上面添加了
publicClient
方法。但是,我只得到未定义的输出,没有定价数据。有什么建议吗?在上面的例子中,
public\u client
现在没有定义。它还包括以后的
KrakenClient
创建和API调用,所以我认为您需要手动调试它