Я использую Geonames API и получаю от него данные с помощью почтового запроса. Теперь я хочу взять часть этих данных (широта, долгота) и передать их через другой API (API-интерфейс WeatherBit), так как мой проект должен передать (широта и долгота) в URL и получить данные из него. Я пытаюсь сделать запрос на получение в на стороне сервера, чтобы получить информацию и безопасный ключ API, но это дает мне undefined
. код дает мне undefined
в параметрах URL
(Пример. https://api.weatherbit.io/v2.0/forecast/daily/&lat=undefined&lon=undefined&key=API_KEY)
здесь мой код Как я могу это сделать?
Редактировать: Если я снова нажму кнопку, запрос будет работать нормально. Поэтому мне нужно нажать кнопку 2 раза, прежде чем я получу лат и лонг данные из первого API. Как решить эту проблему>
первое нажатие на результаты кнопки
второе нажатие на результаты кнопки
на стороне клиента
const getWeatherIoURL = async (url) => {
const response = await fetch(url);
try {
const data = await response.text();
//console.log(data);
return data;
} catch (error) {
console.error(error);
}
};
export default getWeatherIoURL;
мой код на стороне сервера для отправки и получения запроса
weatherData = {}
app.post('/geoNamesData', (request, response) => {
weatherData['date'] = new Date();
weatherData['countryName'] = request.body.countryName;
weatherData['latitude'] = request.body.latitude;
weatherData['longitude'] = request.body.longitude;
response.send(weatherData);
});
//console.log(`your api is: ${process.env.API_WEATHER_KEY}`);
app.get('/weatherURL', (request, respond) => {
const url_forecast = 'https://api.weatherbit.io/v2.0/forecast/daily';
const lat = `lat=${weatherData.latitude}`;
const long = `lon=${weatherData.longitude}`;
const url = `${url_forecast}?${lat}&${long}&key=${process.env.API_WEATHER_KEY}`;
console.log(url);
respond.send(url);
});
структура моего кода
import geoNamesData from './geoNames_data';
import getWeatherIoURL from './weather_bit';
import postData from './post_geoNames';
//import exposeWeatherIoForecast from './weather_bit'
export function main() {
document.getElementById('search').addEventListener('click', (event) => {
event.preventDefault();
const baseURL = 'http://api.geonames.org/searchJSON?q=';
const API_Credentials = '&username=*********';
const destination = document.querySelector('#destination').value;
geoNamesData(baseURL, destination, API_Credentials).then((data) => {
//console.log(data);
postData('/geoNamesData', {
date: new Date(),
countryName: data.countryName,
latitude: data.lat,
longitude: data.lng,
});
});
getWeatherIoURL('/weatherURL').then((data) => {
console.log(data);
exposeWeatherIoForecast(data);
});
}
поток моего кода: определение широты, долготы и названия страны для указанного c города, введенного пользователем с помощью API geonames, затем используйте широта и долгота этого запроса в качестве параметров другого API (wathearbit), которому нужны эти данные для выполнения запроса, чтобы получить текущую или прогнозную погоду для города и обновить пользовательский интерфейс с этой информацией ** город, название страны, погода * *