node.js - 在 nodejs 中的 res.render 之前设置变量
问题描述
我正在尝试将 userGameList 设置为 User.games,但 res.render 不等待变量,第一个日志是我所期望的,但第二个是空字符串。我试过异步和等待。
app.get('/games', async (req, res) => {
var userGameList = "";
if (req.isAuthenticated()) {
User.findById(req.user.id, async function(err, foundUser) {
if (err) {
console.log(err)
} else {
if (foundUser) {
userGameList = await foundUser.games;
console.log(userGameList); // log with the right value
}
}
})
};
console.log(userGameList); // log empty string
res.render('pages/games-list', {
req: req,
parentPage: "/",
pageTitle: "Games",
myUserGames: userGameList
});
解决方案
userGameList
一旦在异步方法中可用,您就返回响应。
这是异步函数 (User.findById) 的本质,除非等待,否则它将释放线程以执行下一个代码块。一旦收到响应,异步函数就会执行回调。
app.get('/games', async (req, res) => {
var userGameList = "";
if (req.isAuthenticated()) {
User.findById(req.user.id, async function(err, foundUser) {
if (err) {
console.log(err)
} else {
if (foundUser) {
userGameList = await foundUser.games;
console.log(userGameList); // log with the right value
res.render('pages/games-list', {
req: req,
parentPage: "/",
pageTitle: "Games",
myUserGames: userGameList
});
}
}
})
};
推荐阅读
- react-native - 启用 GPS 后如何导航到屏幕?
- c# - 在 LINQ 中未检测到来自存储过程的用户定义类型
- react-admin - 从特定分支或打开拉取请求安装 React-Admin 包
- python - Django注释计数不起作用总是返回1
- android - react native 执行 aapt 失败
- node.js - 有没有办法用 Jasmine 测试功能而不暴露它们?
- java - 所需的请求部分“文件”不存在。尝试上传图片,角度 - >弹簧
- visual-studio-code - VS Code 路径自动完成到操作系统的根目录
- scala - 如何从 src/it 中导入在 src/test 目录中定义的包
- c++ - Qt 中定时器的正确使用