【发布时间】:2021-12-14 13:41:47
【问题描述】:
我将一个包含异步函数的对象传递给 .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 })
})
函数控制台记录数据并返回
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')
`
};
我想在 .ejs 文件中呈现返回的数据。我正在尝试这个
<body>
<p>
<%= functions.getPrice('ethereum') %>
</p>
</body>
刷新浏览器时控制台日志成功
ethereum GBP 3141.5
3.00725 % / 24 hours
所以函数被调用了,但是数据没有被渲染到屏幕上。
我反而得到 [object Promise]。
我觉得这是一个异步问题,但不确定如何/是否可以让 ejs 等待返回的数据。我是不是结构错了?
感谢任何帮助!
【问题讨论】:
-
使用
async: true配置EJS,然后在您的模板中使用await functions.getPrice(...)。 -
这能回答你的问题吗? ejs async true with node Express
标签: javascript node.js asynchronous ejs