gpt4 book ai didi

node.js/express/mongoose 菜鸟问题

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

我刚刚开始使用带有express和mongoose的node.js,我有一个愚蠢的问题......

在我的routes.js 文件中,我有以下部分:

// DASHBOARD SECTION, GET MY GROUPS
app.get('/dashboard', isLoggedIn, function(req, res) {
var Group = require('../app/models/group'); //adding mongoose Schema
Group.find({"groupDetails.userId" : req.user._id})
.exec(function(err, myGroups) {
if (err)
res.send(err);
var myGroups = myGroups;

//console.log("myGroups: " + myGroups); // check with "heroku logs"

res.render('dashboard.ejs', {
user : req.user,
myGroups : myGroups
});
});
});

此代码有效。当有人浏览仪表板页面时,我收到“myGroups”,它是一个数组,其中包含当前登录用户的所有组。

现在,这是我的问题:

实际上,当有人浏览仪表板页面时,我想进行第二次查询(基于完全相同的模式)以获取当前登录用户的所有组和所有文件。

然后我会将“user”、“myGroups”和“myFiles”发送到仪表板页面。我怎样才能做到这一点?

到目前为止,我尝试了几件事,但没有结果......我想我有点迷失在 node.js 回调函数中:D

非常感谢您的帮助。

最佳答案

这里有两个选择:

1) 处理callback hell(callback inside callback inside...)来检索3组数据。这种方式是最不优雅和高效的

2) 使用一个库,它将异步完成这项工作,并在检索所有数据时有一个回调,您可以使用 async图书馆真是太棒了。在这种情况下,您将只有一个回调,您可以在其中访问已获取的所有数据。

您可以使用 async 执行以下操作在你的情况下:

var async = require('async');

..........

app.get('/dashboard', isLoggedIn, function(req, res) {
var Group = require('../app/models/group'); //adding mongoose Schema
var User = require('../app/models/user'); //adding mongoose Schema
var Files = require('../app/models/files'); //adding mongoose Schema
async.parallel({
groups: function(callback){
Group.find(...).exec(callback);
},
users: function(callback){
Users.find(...).exec(callback);
},
files: function(callback){
Files.find(...).exec(callback);
}
}, function(err, results) {
if (err)
res.send(err);

var groups = results.groups;
var users = results.users;
var files = results.files;

res.render('dashboard.ejs', {
user : req.user,
myGroups : groups,
users: users,
files: files
});
});
});

关于node.js/express/mongoose 菜鸟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27702956/

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