Salut, ça fait quelques jours que je bloque sur un problème. C’est une fonction qui sert seulement à envoyer une requête vers openweathermap.com pour afficher des infos comme la température, vitesse du vent, humidité… d’une ville. C’est tout simple, la voilà :^
// Le ficher 'nearby.js'
// La fonction remove_accents() enleve les accents ex: bléblé -> bleble | développement -> developpement
// J'utilise le module 'request' pour envoyer une requête http
module.exports = function find_temp(url) {
if (url === undefined) { throw new Error('No argument passed.'); }
const formatedURL = remove_accents(url);
console.log('Sent: ' + formatedURL);
request(url, (error, response, body) => {
if (error) {console.log('error at request'); console.log(error);}
const obj = JSON.parse(body);
if (obj.message == 'city not found'){ console.log('city not found'); }
try {
const DATA = {
tempe_2: Math.round(obj.main.temp) || null
};
console.log(DATA.tempe_2); // Retourne la température, pas de undefined
return DATA.tempe_2;
} catch (error) {
console.log('Cannot read obj.main.temp (tempe_2) proprety.');
console.log(error);
}
});
}
..
// Fichier 'weather.js'
// ...
// NEARBY_CITIES.f2.name est le nom d'une ville ex: Paris, Moscow..
const url2 = 'http://api.openweathermap.org/data/2.5/weather?q=' + NEARBY_CITIES.f2.name +
'&units=metric&appid=' + apiKey;
let i = find_temp(url2);
console.log(i) // undefined
// ...
'console.log' retourne undefined. Plus exactement :
Sent: http://api.openweathermap.org/data/2.5/weather?q=Le Pre-Saint-Gervais&units=metric&appid=APIKEY
city not found
Cannot read obj.main.temp (tempe_2) proprety.
TypeError: Cannot read property 'temp' of undefined
at Request.request [as _callback] (C:\Users\AdminHP\Desktop\Python\wind\nearby.js:62:35)
at Request.self.callback (C:\Users\AdminHP\Desktop\Python\wind\node_modules\request\request.js:185:22)
at Request.emit (events.js:182:13)
at Request.<anonymous> (C:\Users\AdminHP\Desktop\Python\wind\node_modules\request\request.js:1157:10)
at Request.emit (events.js:182:13)
at IncomingMessage.<anonymous> (C:\Users\AdminHP\Desktop\Python\wind\node_modules\request\request.js:1079:12)
at Object.onceWrapper (events.js:273:13)
at IncomingMessage.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1081:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
Si j’envois la requête manuellement (par navigateur), ça marche. Résultat pour "Le Pre-Saint-Gervais":
{"coord":{"lon":2.4,"lat":48.89},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":16.74,"pressure":1019,"humidity":72,"temp_min":15,"temp_max":19},"visibility":10000,"wind":{"speed":2.1,"deg":360},"clouds":{"all":0},"dt":1534372200,"sys":{"type":1,"id":5610,"message":0.0041,"country":"FR","sunrise":1534308245,"sunset":1534359860},"id":3002499,"name":"Le Pre-Saint-Gervais","cod":200}
J’ai recherché une réponse et je pense que la solution serait d’implementer async/await ou des promises stackoverflow. Est-ce que quelqu’un pourrait me monter comment implémenter ça ? Merci
+0
-0