提问人:John Dow 提问时间:11/15/2023 最后编辑:John Dow 更新时间:11/15/2023 访问量:22
如何在快速页面上呈现提取
How can I render fetch on an express page
问:
我已经尝试了两天,以了解如何在我的情况下使用 fetch。也许我只是不明白如何在 express 中正确使用它的原理。我已经读了很多,我有我需要的获取结果,但我在任何地方都找不到如何在快递中显示它。这是我的代码:
import { fortunes, fetchAdvice } from './predictions.js'
app.engine('.hbs', engine({ extname: '.hbs' }))
app.set('view engine', '.hbs')
app.set('views', './views')
app.use(express.static(path.resolve(process.cwd(), 'static')))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.get('/about', async (req, res) => {
// Prediction Index Calculation & This is the page for publishing fetch
const randomFortune = fortunes[Math.floor(Math.random() * fortunes.length)]
res.render('about', {
fortune: randomFortune,
advice: await fetchAdvice().then((advice) => {
advice.text.toUpperCase()
}),
})
})
这是对公共 API 的请求,它工作正常,console.log 显示我需要的结果。 预测.js:
const fortunes = ['Conquer your fears or they will conquer you.', 'Rivers need sources.']
const fetchAdvice = async () => {
const res = await fetch(url_random)
if (res.ok) {
const advice = await res.json()
console.log(`${advice.text.toUpperCase()}`) // Here the type is String
return advice
}
}
fetchAdvice().then((advice) => {
advice.text.toUpperCase()
})
export { fortunes, fetchAdvice }
这是我发布两个动态变量的 handlebars 页面,第一个来自 fortunes 数组,这里没有问题(statics 就是 statics),我正在尝试使用 fetch 实现第二个。我尝试使 res.render 既异步又没有 async / await ,在第一种情况下我得到 [object Promise] ,这是预期的,在第二种情况下(如代码中),在浏览器的 js 控制台中,渲染根本不会发生。
关于.hbs:
{{#if fortune}}
<p>Your prediction for today: {{fortune}}</p>
{{/if}}
{{#if advice}}
<p>Your advice for today: {{advice}}</p>
{{/if}}
答:
0赞
John Dow
11/15/2023
#1
app.get('/about', async (req, res) => {
// Prediction Index Calculation & This is the page for publishing fetch
const randomFortune = fortunes[Math.floor(Math.random() * fortunes.length)]
res.render('about', {
fortune: randomFortune,
advice: await fetchAdvice().then((advice) => {
return advice.text.toUpperCase() // We need to add return, that was the problem!
}),
})
})
评论