javascript - 使用 Mongoose 查询时,如何保存查询并在渲染 EJS 页面时将其用作参数?
问题描述
我正在尝试构建一个管理仪表板和这个管理仪表板的一部分,我想展示猫鼬数据,例如用户和最近完成的辅导课程。在呈现页面时,我无法保存这些数据并将其分配给 EJS 参数。
// Admin Dashboard
// Find students
function getUsers() {
User.find({tutor:false}, function(err, foundItems) {
return foundItems
})}
// Find sessions
function getSessions() {
Session.find({}, function(err, foundItems) {
return foundItems;
})}
app.get('/admin', function(req, res){
res.render("pages/admin", {
users: getUsers(),
sessions: getSessions()
})
});
解决方案
第一个观察:
User.find()
是一个异步函数,即程序的主要流程不会等待它执行,因此undefined
会传递给JS对象。为避免这种情况,您必须返回一个承诺,或使用异步等待。这是一个例子:
async function getUsers() {
const foundItems = await User.find({tutor:false})
return foundItems;
}
// Find sessions
async function getSessions() {
const foundItems = await Session.find({});
return foundItems;
}
app.get('/admin', async function(req, res){
res.render("pages/admin", {
users: await getUsers(),
sessions: await getSessions()
})
});
这更容易阅读。你可以让它更短:
async function getUsers() {
return User.find({tutor:false});
}
// Find sessions
async function getSessions() {
return Session.find({});
}
app.get('/admin', async function(req, res){
res.render("pages/admin", {
users: await getUsers(),
sessions: await getSessions()
})
});
由于您直接返回foundItems(没有在任何地方使用它),您不需要等待它,您可以直接返回回调的承诺等待。
推荐阅读
- scilab - Scilab,计算部分向量的平均值(矩阵列)
- css - nth-child() 不工作 wither material-ui
- javascript - 从 Angular 调用纯 JavaScript 代码会更改“this”引用
- swift - 导航链接错误
- javascript - 将多个PDF文件合并为一个角度8
- javascript - 使用javascript创建单选按钮html表单,它不断创建重复的ID
- swift - SwiftUI - DragGesture 和 .onDelete 冲突
- java - 检测 Android 中的 BLE 设备名称更改
- android - 有没有办法在 Android Studio 中更改自动格式化
- airflow - KubernetesExecutor + PythonOperator + AIRFLOW__KUBERNETES__DAGS_IN_IMAGE 正在发送子目录命令,导致 pod 无法正常启动