我將包含異步函式的物件傳遞給 .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 等待回傳的資料。我是否錯誤地構造了這個?
任何幫助,不勝感激!
uj5u.com熱心網友回復:
您可以在 JS 檔案中呼叫您的函式,然后將結果傳遞給 EJS 檔案:
app.get('/', async(req, res) => {
res.render('dashboard.ejs', { price: await functions.getPrice('ethereum')})
})
然后在你的 EJS 中:
<body>
<p>
<%= price %>
</p>
</body>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352332.html
標籤:javascript 节点.js 异步 ejs
上一篇:用戶在typeahead輸入框中輸入很長的數字很慢,onSearch無法使用react-bootstrap-typeahead版本5.2.1獲取完整的數字
