Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用NodeJ调用多个API并将它们合并在一起_Javascript_Node.js - Fatal编程技术网

Javascript 使用NodeJ调用多个API并将它们合并在一起

Javascript 使用NodeJ调用多个API并将它们合并在一起,javascript,node.js,Javascript,Node.js,我改变问题是因为我觉得我解释错了 我目前使用1个API端点来接收我需要的数据。我需要添加第二个端点以同时接收来自两个端点的数据,将它们合并在一起并存储在数据库中 第一端点- https://api.binance.com/api/v3/klines?symbol=${symbol}&间隔=30m&限制=1 第二终点-https://api.binance.com/api/v3/ticker/24hr?symbol=${symbol} 下面是我如何从第一个端点接收数据 const getBTCDa

我改变问题是因为我觉得我解释错了

我目前使用1个API端点来接收我需要的数据。我需要添加第二个端点以同时接收来自两个端点的数据,将它们合并在一起并存储在数据库中

第一端点-

https://api.binance.com/api/v3/klines?symbol=${symbol}&间隔=30m&限制=1

第二终点-https://api.binance.com/api/v3/ticker/24hr?symbol=${symbol}

下面是我如何从第一个端点接收数据

const getBTCData = async symbol => {
    let data = await fetch(`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=30m&limit=1`).then(res => res.json());
    const btcusdtdata = data.map(d => {
        return {
            Open: parseFloat(d[1]),
            High: parseFloat(d[2]),
            Low: parseFloat(d[3]),
            Close: parseFloat(d[4]),
            Timespan: 30,
        }
    });
    console.log(btcusdtdata);
    saveToDatebase(symbol, btcusdtdata);
};
Im从此端点返回4个参数

我需要从第二个端点获取一个参数,并将其与第一个端点的参数相结合

我需要第二个端点的这个参数-quoteEvolume:15.30000000

我建立了这个承诺。所有这些都可以是一个解决方案,但我不太明白如何从2个api返回数据,并将它们合并到一个对象中保存在MongoDB中

完整代码

小说明-目标是从两个端点获取数据并将其存储在MongoDB中,并计算过去200天quoteVolume的平均值

const{MongoClient}=require'mongodb'; const schedule=需要“节点计划”; const fetch=requirenode fetch; 需要'dotenv'.config 使用strict;//这是ES6特有的。快速运行代码的帮助对于通知系统非常重要 const nodemailer=requirenodemailer; 常量符号=[ADABTC、AEBTC、AIONBTC]; //描述性名称有助于您未来的自我和他人更容易理解代码 常量getBTCData=异步符号=>{ 让数据=等待获取`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=30m&limit=1`; 常量btcusdtdata=data.mapd=>{ 返回{ 打开:已解析浮动[1], 高:解析为浮动[2], 低:已解析浮点[3], 关闭:已解析为浮动[4], 卷:已解析为浮动[5], 时间跨度:30, } }; console.logbtcusdtdata; saveToDateBaseSynmbol,btcusdtdata; //递归函数很复杂,我们可以在这里去掉它 //把责任推给打电话的人 }; //等待超时的助手函数 const sleep=ms=>newpromisers=>setTimeoutres,ms; const j=schedule.scheduleJob'**',async=>{ //展开此函数以负责循环数据 对于符号的let符号{ 等待GetBTCDATA符号; 等待睡眠; } }; 常量getDateTime==>{ 让今天=新的日期; 让date=today.getFullYear+'-'+today.getMonth+1+'-'+today.getDate; 让时间=今天。getHours+:+今天。getMinutes+:+今天。getSeconds; 返回日期+“”+时间; }; const saveToDatebase=asyncsymbol,BTCdata=>{ 试一试{ 常量url=mongodb://username:password@ip.address.com:port/dbname?retryWrites=true&w=maist'; 让dateTime=getDateTime; 让db=await MongoClient.connecturl,{useUnifiedTopology:true}; constdbo=db.db'Crypto'; const myobj=Object.assign{Name:symbol,Date:dateTime},BTCdata[0]; 等待dbo.collectionsymbol.insertOnemyobj; const average=等待dbo.collectionsymbol.aggregate[{ $addFields:{ DateObj:{ $regexFindAll:{input:$Date,regex:\\d+} } } }, { $set:{ DateObj:{ $dateFromParts:{ 年份:{$toInt:{$arrayElemAt:[$DateObj.match,0]}, 月份:{$toInt:{$arrayElemAt:[$DateObj.match,1]}, 日期:{$toInt:{$arrayElemAt:[$DateObj.match,2]}, 小时:{$toInt:{$arrayElemAt:[$DateObj.match,3]}, 分钟:{$toInt:{$arrayElemAt:[$DateObj.match,4]}, 第二个:{$toInt:{$arrayElemAt:[$DateObj.match,5]}, 时区:欧洲/伦敦 } } } }, { $match:{ $expr:{ $gte:[$DateObj,{$subtract:[$$NOW,201*60*60*24*1000]}] } } }, { $group:{ _id:null, 卷:{ $avg:$Volume } } } ].托雷; 控制台。日志“插入了1个文档”; console.logBTCdata[0]。卷; console.logaverage[0]。卷; const RealTimeDataVolume=parseIntBTCdata[0]。卷; const HistoricalTimeDataVolume=parseIntaverage[0]。卷;//201天卷此处3286033.4285714286 const daytimesrealmaverage=RealTimeDataVolume*48// 此处的1天实时数据196579344 const Previous200dVolume=历史时间数据量-daytimesrealmaverage/200; const multiplePrevous200dVolume=以前的200dVolume*5; 如果MultiplePrevious200dVolume}; 你也可以用同样的方法

作为回应,您将得到一个子对象


您需要执行res[quoteEvolume]以获取数据。

您可以用调用第一个API的相同方式调用第二个API,只需更改URL并从响应中提取quoteEvolume。您可以用现在调用的相同方式调用。此外,您可能希望使用request-promise或Axios来轻松处理内容。如果您使用相同的方法,是否有任何问题?@Yos这是同时调用两个API的方法吗?我需要从一个api和另一个api的一些数据只是复制粘贴调用klines api的代码,并更改第二个api的url。我不明白这是怎么回事issue@Yos我更新了主要问题,很抱歉,但我仍然对如何从第二个API和第一个API一起接收数据感到困惑。