У меня есть сайт, который отображает текущую погоду, и я пытаюсь заставить его автоматически обновляться с помощью веб-сокетов. Мой сервер веб-сокетов получает широту и долготу от клиента, и моя цель состоит в том, чтобы каждую минуту передавать их в API погоды с помощью cron, а затем отправлять ответ от этого API моему клиенту.
Вот мой код:
let getWeather = (lat, long) => {
let key = '';
let url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&appid=${key}`;
return fetch(url)
.then(response => {
return response.json();
})
.then(data => {
return data;
});
};
cron.schedule('* * * * *', () => {
// need to call getWeather with lat & long here somehow
});
let wsServer = wss.on('connection', (wsclient) => {
wsclient.on('message', (message) => {
let data = JSON.parse(message);
// data contains both latitude and longitude
let weatherData = {
'temp': null,
'humidity': null,
'clouds': null
} // need to populate this object from getWeather() response
// broadcast weather back to client
wss.clients.forEach((client) => {
client.send(JSON.stringify(weatherData));
});
});
});
У меня просто не получается связать все это вместе. Я думаю, что мне может понадобиться передать wsServer
в getWeather()
и затем вытянуть широту и долготу из data
, чтобы перейти к выборке, но я не уверен, как именно это сделать. Я также озадачен тем, как включить cron, чтобы я мог постоянно отправлять клиенту самые новые данные.
Редактировать: Моя цель - чтобы клиент отправлял lat и long один раз, а затем сервер веб-сокетов будет отправлять обновленную погоду каждую минуту. Вот почему я считаю, что мне нужно использовать cron или что-то подобное, чтобы постоянно получать обновленную погоду для отправки обратно.