我已经创建了一个用户个人资料页面,该页面旨在链接到用户创建的任何记录,包括艺术家和场地(以及其他)。以下针对Artists的代码按预期工作;该用户创建的艺术家个人资料会在其个人资料下方显示为超链接。同样,如果我使用相同的代码切换出“演出场所艺术家”,它也会返回正确的结果。
//USER PROFILES
app.get("/users/:id", function(req, res){
User.findById(req.params.id, function(err, foundUser){
if (err) {
console.log(err);
res.redirect("back");
}
Artist.find().where('author.id').equals(foundUser._id).exec(function(err, artists){
if (err) {
console.log(err);
res.redirect("back");
}
res.render("users/show", {user: foundUser, artists: artists});
});
});
});
但是,我要在个人资料页面上同时返回 艺术家和场地。我不知道该怎么做。使用下面的代码,我得到一个错误的“未定义的地点”。浏览其他问题似乎表明实际上不可能找到多个集合,但是我对MongoDB(以及一般而言)很陌生,并且不确定我是否正确理解了这一点。从表面上看,我本以为这应该很简单,所以不确定该错误是否仅与语法或代码顺序有关。
谢谢。
//USER PROFILES
app.get("/users/:id", function(req, res){
User.findById(req.params.id, function(err, foundUser){
if (err) {
console.log(err);
res.redirect("back");
}
Artist.find().where('author.id').equals(foundUser._id).exec(function(err, artists){
if (err) {
console.log(err);
res.redirect("back");
}
res.render("users/show", {user: foundUser, artists: artists});
});
Venue.find().where('author.id').equals(foundUser._id).exec(function(err, venues){
if (err) {
console.log(err);
res.redirect("back");
}
res.render("users/show", {user: foundUser, venues: venues});
});
});
});
答案 0 :(得分:1)
要查找场地和艺术家,您必须在艺术家功能之后放置场地查找功能 因为通常在节点js中,我们使用异步代码,所以在执行第一个艺术家查找功能后,页面将呈现艺术家数据并完成响应,因此第二个函数将不会执行 看到这个
app.get("/users/:id", function (req, res) {
User.findById(req.params.id, function (err, foundUser) {
if (err) {
console.log(err);
res.redirect("back");
}
Artist.find().where('author.id').equals(foundUser._id).exec(function (err, artists) {
Venue.find().where('author.id').equals(foundUser._id).exec(function (err, venues) {
if (err) {
console.log(err);
res.redirect("back");
} else
res.render("users/show", {
user: foundUser,
venues: venues,
artists: artists
});
})
});
});
});
我希望这个答案对您有帮助