Javascript 从API获取数据并在express view中输出
我已经编写了以下API包装器,并希望在express视图中输出它 我的API调用文件是exchanges.js,我使用以下函数来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_
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调用,所以我认为您需要手动调试它