Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

221
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda