Estoy pasando un objeto que contiene funciones asíncronas al archivo .ejs
const express = require('express') const app = express() const PORT = process.env.PORT || 3000 const functions = require('./functions.js') app.set('view-engine', 'ejs') app.listen(PORT, () => { console.log('listening on 3000', new Date()) }) app.get('/', (req, res) => { res.render('dashboard.ejs', { functions }) })la consola de funciones registra los datos y también los devuelve
const getPrice = async (coin) => { let data = await CoinGeckoClient.coins.fetch(coin); console.log(coin, "GBP", data.data.market_data.current_price.gbp) console.log(data.data.market_data.price_change_percentage_24h, '% / 24 hours') return ` ${coin} "GBP" ${data.data.market_data.current_price.gbp} ${data.data.market_data.price_change_percentage_24h}% / 24 hours') ` };Quiero representar los datos devueltos en el archivo .ejs. estoy intentando esto
<body> <p> <%= functions.getPrice('ethereum') %> </p> </body>el registro de la consola es exitoso cuando actualizo el navegador
ethereum GBP 3141.5 3.00725 % / 24 hourspor lo que se llama a la función, pero los datos no se representan en la pantalla.
En cambio, obtengo [objeto Promesa].
Siento que este es un problema asíncrono, pero no estoy seguro de cómo/si puedo hacer que los ejs esperen los datos que regresan. ¿Estoy estructurando esto mal?
¡Cualquier ayuda se agradece!
Puede llamar a su función en su archivo JS y luego pasar el resultado al archivo EJS:
app.get('/', async(req, res) => { res.render('dashboard.ejs', { price: await functions.getPrice('ethereum')}) })Luego en tu EJS:
<body> <p> <%= price %> </p> </body>