gpt4 book ai didi

javascript - 使用正确的后备路由结构从 Nodejs 中的异步调用传递数据的最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:45 26 4
gpt4 key购买 nike

我有一个请求函数,可以调用端点并从中获取数据。然后我将此数据传递给 hbs 模板进行渲染,但由于异步性,传递给模板的数组为空。正确的做法是什么。请帮忙。代码片段如下。

app.get("/verifier", keycloak.protect('verifier'), (req, res) => {  
cirRes = cirJSON.parse(cirJSON.stringify(res))
//the req object is a circular object so you cannot convert it to json normaly wihtout data loss.
allUser = []
access_token = cirRes.req.kauth.grant.access_token.token
var options = { method: 'GET',
url: 'http://localhost:8080/auth/admin/realms/create_user_realm/users',
headers:
{
'Content-Type': 'application/x-www-form-urlencoded',
Host: 'localhost:8080',
Accept: '*/*',
Authorization: `Bearer ${ access_token }` } }
request(options, function (error, response, body) {
if (error) throw new Error(error);
data = JSON.parse(body)
for (user in data){
allUser.push(data[user])
}
//console.log(allUser)
})
if (res.statusCode != 200) {
res.redirect('/logout')
}
console.log(allUser)
res.render('verifier', {"users": allUser})
})

上面代码中的 allUser 结果是一个空数组。

编辑>>>>

鉴于本线程中的答案,此问题已结束。 How do I return the response from an asynchronous call?它涵盖了发出异步请求的不同方法。

经历同样的事情,我在代码中做了这个改变

app.get("/verifier", keycloak.protect('verifier'), (req, res) => {  
cirRes = cirJSON.parse(cirJSON.stringify(res))
//the req object is a circular object so you cannot convert it to json normaly wihtout data loss.
//console.log(cirRes.req.kauth.grant.access_token.token)
allUser = []
access_token = cirRes.req.kauth.grant.access_token.token
var options = { method: 'GET',
url: 'http://localhost:8080/auth/admin/realms/create_user_realm/users',
headers:
{
'Content-Type': 'application/x-www-form-urlencoded',
Host: 'localhost:8080',
Accept: '*/*',
Authorization: `Bearer ${ access_token }` } }
request(options, function (error, response, body) {
if (error) { throw new Error(error) }
data = JSON.parse(body)
for (user in data){
allUser.push(data[user])
}
//console.log(allUser)
res.render('verifier', {"users": allUser})
})
if (res.statusCode != 200) {
res.redirect('/logout')
}
})

这工作正常,但根据nodeJS的最佳实践是正确的,以及nodeJS中的最佳实践是什么,这样即使在调用中发生错误,也会有一些后备机制来渲染。

最佳答案

移动 res.render()res.redirect() 调用,以便它们位于 request() 调用的回调函数内。当您想要将异步提供的信息发送到用户的浏览器或 API 客户端时,这就是您如何使用异步提供的信息。

关于javascript - 使用正确的后备路由结构从 Nodejs 中的异步调用传递数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60112730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com