如何解决来自客户端的Rest API NodeJS连续抓取GET请求
我在NodeJS中创建了一个REST API,该API可以从站点中获取风数据。风数据存储在一个数组中,该数组在for x in X.T: # .T for transposing the array
plt.plot(x,Y,'o',alpha=0.3)
调用中被抓取时会不断增长。
我现在想让客户端(ReactJS)向此API执行GET请求,以获取 current 刮风数据列表。 (我希望后端运行一段时间以建立一个风力数据列表-仅在抓取站点上的风力信息发生更改时才更新该列表,以使列表中不会出现重复项。)
例如,在json中,包含两个刮擦信息的刮擦天气数据数组如下所示:
JSON示例
setInterval
scrape.js
中的抓取代码[
[
{ No: 1,Name: 'WINDDIR',Unit: 'gr',Value: [Object] },{ No: 2,Name: 'WINDSPD',Unit: 'm/s',{ No: 3,Name: 'WINDGUS',{ No: 4,Name: 'WINDGUSDIR',{ No: 5,Name: 'BAT',Unit: null,{ No: 6,Name: 'Vindhastighet',{ No: 7,Name: 'Vindretning',{ No: 8,Name: 'VindOK',{ No: 9,Name: 'VindNOK',Value: [Object] }
],[
{ No: 1,Value: [Object] }
]
]
index.js
const puppeteer = require("puppeteer");
const scrapeAPI = async (url) => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
var content = await page.content();
innerText = await page.evaluate(() => {
return JSON.parse(document.querySelector("body").innerText);
});
const instantWind = innerText["Instantaneous"];
await browser.close();
return instantWind;
};
const getWindForecast = (windRecordings) => {
setInterval(() => {
const instantWind = scrapeAPI(
"http://mobvaer.kystverket.no/v2/api/stations/5265049"
);
instantWind.then((res) => {
if (windRecordings.length > 0) {
// A wind value(s) is already pushed to the list
const latestRecordedWind = windRecordings[windRecordings.length - 1]; // get the first element out
// Compare the lates wind value in the list to the lates API request wind value
if (
latestRecordedWind[1]["Value"]["Value"] == res[1]["Value"]["Value"]
) {
console.log("They are the same");
} else {
console.log("They are not the same,push them.")
windRecordings.push(res);
}
} else {
// The length is less than 0,no element has been added so far,push element
console.log("Push the first to the list");
windRecordings.push(res);
}
console.log(windRecordings)
});
},2000);
return windRecordings; // NOT SURE IF I SHOULD BE RETURNING HERE,THIS FUNCTION DOES NOT COMPLETE THIS
};
module.exports = {
getWindForecast: getWindForecast
};
那么,我该如何通过GET请求将当前的刮风数据数组提供给客户端?
我考虑过的一个解决方案是让后端填充Firebase数据库,并让另一个端点发送连接到数据库,以准备发送wind阵列。但是,我想在没有数据库的情况下执行此操作。有什么选择? 谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。