0

我使用带有 Google 应用引擎编辑器的 Cloud Shell 创建了自己的 API。这是在测试中运行良好的代码片段:

app.get('/fetch_ticker', (req, res) => {
    (async() => {
        let pair = req.param('pair', "BTC/ETH");
        let ex = req.param('exchange', "coinmarketcap");
        let myArr = [];
        let exchange = await new ccxt[ex]();
        let tickers = await exchange.fetchTicker(pair);

        myArr.push(tickers);

        //Send req
        res.status(200).send(myArr);
    })()
});

现在,当我在“Gcloud app deploy”之后尝试并在生产中运行它时,其他获取请求工作正常,但是当“ex”等于“coinmarketcap”时,它只是不断加载并最终给出 500 错误。

更新:

这是日志:

2018-11-03 11:43:50 default[20181103t163752]  ==== JS stack trace =========================================
2018-11-03 11:43:50 default[20181103t163752]
2018-11-03 11:43:50 default[20181103t163752]  Security context: 0x3e6826325879 <JSObject>
2018-11-03 11:43:50 default[20181103t163752]      1: indexBy(aka indexBy) [/srv/node_modules/ccxt/js/base/functions/generic.js:~82] [pc=0x30a50d2a5374](this=0x32f
9351022d1 <undefined>,/* anonymous */=0x1e7ccf12dc59 <JSArray[37746]>,/* anonymous */=0x32f935144e51 <String[2]: id>,/* anonymous */=0x32f9351022d1 <undefined>)
2018-11-03 11:43:50 default[20181103t163752]      2: arguments adaptor frame: 2->3
2018-11-03 11:43:50 default[20181103t163752]      3: set_markets(aka setMarkets) [/srv/node_modules/ccxt/js/base/Exchange.js:613] ...
2018-11-03 11:43:50 default[20181103t163752]
2018-11-03 11:43:50 default[20181103t163752]  FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
2018-11-03 11:43:50 default[20181103t163752]   1: node::Abort() [node]

我尝试使用 node --max_old_space_size=4096 app.js 增加内存,但错误仍然存​​在。

4

1 回答 1

0

您包含的日志只是通用请求日志。我不确定 nodejs 环境是否也提供应用程序日志/详细信息,如果是,您如何获得它们。至少在 python 标准环境中,此类日志(如从开发者控制台读取 Google App Engine 上的应用程序日志中所示可访问)通常包含错误消息或对识别实际问题非常有用的回溯。如果没有这些细节,那就是猜测,这就是我要在下面做的:)

可能是coinmarketcap交易所实际上不支持fetchTicker,而您的代码假定所有交易所都支持它。手册中ccxt一个示例实际上对此进行了检查:

// JavaScript
if (exchange.has['fetchTicker']) {
    console.log (await (exchange.fetchTicker ('BTC/USD'))) // ticker for BTC/USD

或者coinmarketcap交换服务器出现某种(临时)中断。或者不再以与ccxt库所期望的相同条件或相同格式提供数据,在这种情况下,我会将其替换为默认交换,以用于行为正常的交换。

更新:

好的,错误日志表明内存分配问题。典型原因是应用实例内存不足。您可以通过app.yaml配置解决此问题,具体取决于您使用的 GAE 环境:

于 2018-10-28T16:33:10.680 回答