Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

219
Views
no se puede representar una página ejs con variables de la llamada axios api

He visto las otras preguntas sobre este tema, pero mi problema es ligeramente diferente: tengo una llamada axios dentro del .then de otra llamada axios, y luego tomo valores de la API que llamé con axios y en otro .then renderiza una página ejs, pero la primera vez que ejecuto, intenta renderizar la página antes de que se completen las llamadas axios, por lo que las variables para construir la página no están definidas, en particular, imprime el error 'h1 no está definido' y h1 es la primera variable en el documento ejs después de nameCapitalized que, como puede ver en el código, es de la solicitud y no de la llamada axios api; a partir de la segunda funciona perfectamente, cuando funciona imprime en orden las sentencias console.log en .then, por lo que el orden de ejecución es el correcto, al menos a partir de la segunda ejecución. Esta solicitud de obtención se realiza después de hacer clic en un enlace en el navegador.

Aquí el código:

 app.get('/private_:city/', function(req, response) { const name = req.params.city; const nameCapitalised = name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); let lat; let lon; let country; let jsonObj; let h1; let w1; let t1; let uv1; let rp1; let ws1; axios.get(`http://api.openweathermap.org/geo/1.0/direct?q=${nameCapitalised}&limit=1&appid=${apiKeyOpenWeather}`) .then(res => { console.log('first'); lat = res.data[0].lat; lon = res.data[0].lon; country = res.data[0].country; console.log(res.data[0]); axios.get(`https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&exclude=daily,minutely&units=metric&lang=it&appid=${apiKeyOpenWeather}`) .then(res => { console.log('second'); jsonObj = res.data; h1 = new Date(jsonObj.hourly[0].dt * 1000).getHours(); w1 = jsonObj.hourly[0].weather[0].description; t1 = jsonObj.hourly[0].temp; uv1 = jsonObj.hourly[0].uvi; rp1 = Math.trunc(jsonObj.hourly[0].pop * 100); ws1 = jsonObj.hourly[0].wind_speed; }) .then(res => { console.log('third'); response.render('private.ejs', { title: nameCapitalised, t1: t1, h1: h1, w1: w1, uv1: uv1, rp1: rp1, ws1: ws1, }); }); }); });
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Trate de usar solo entonces...

 app.get('/private_:city/', function(req, response) { const name = req.params.city; const nameCapitalised = name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); let lat; let lon; let country; let jsonObj; let h1; let w1; let t1; let uv1; let rp1; let ws1; axios.get(`http://api.openweathermap.org/geo/1.0/direct?q=${nameCapitalised}&limit=1&appid=${apiKeyOpenWeather}`) .then(async (res) => { console.log('first'); lat = res.data[0].lat; lon = res.data[0].lon; country = res.data[0].country; console.log(res.data[0]); return await axios.get(`https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&exclude=daily,minutely&units=metric&lang=it&appid=${apiKeyOpenWeather}`)}) .then(res => { console.log('second'); jsonObj = res.data; h1 = new Date(jsonObj.hourly[0].dt * 1000).getHours(); w1 = jsonObj.hourly[0].weather[0].description; t1 = jsonObj.hourly[0].temp; uv1 = jsonObj.hourly[0].uvi; rp1 = Math.trunc(jsonObj.hourly[0].pop * 100); ws1 = jsonObj.hourly[0].wind_speed; }) .then(res => { console.log('third'); response.render('private.ejs', { title: nameCapitalised, t1: t1, h1: h1, w1: w1, uv1: uv1, rp1: rp1, ws1: ws1, }); }); }); });
about 4 years ago · Juan Pablo Isaza Report

0

Creo que deberías intentar cambiar el orden de las variables en el documento ejs para entender si es un problema de 'h1'

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!