gpt4 book ai didi

node.js - 在一个 View 上显示不同 Mongoose 表的内容

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:00 24 4
gpt4 key购买 nike

我是一名(相对缺乏经验的)Java EE 开发人员,正在学习 Node.js。我正在使用express框架、mongodb和mongoose框架。我一直致力于使用类似 mvc 的架构构建一个简单的博客网站(仅供练习)。它将有 4 个 mongodb 集合:帖子、图像、用户、评论。基本Schema如下:

postSchema = mongoose.Schema({
id: Number,
dateCreated, {type: Date, default: Date.now}
title: String,
content: String
});
var Post = mongoose.model('Post', postSchema);

imageSchema = mongoose.Schema({
id: Number,
postId: Number,
path: String
});

var Image = mongoose.model('Image', imageSchema);

userSchema = mongoose.Schema({
id: Number,
username: String,
password: String,
email: String
});

var User = mongoose.model('User', userSchema);

commentSchema = mongoose.Schema({
id: Number,
postId: Number,
userId: Number,
dateCreated: {type: Date, default: Date.now},
content: String
});

var Comment = mongoose.model('Comment', commentSchema);

我希望能够在一个页面上显示帖子、图像、评论和用户信息。我的问题是我不太清楚如何以异步方式检索和发送所有这些数据。这似乎是我发现的大多数示例的做法(不一定全部在一个文件中):

app.get('/', function(res, req) {
Post.findOne(function(err, post) {
if (err) return res.send(500);
res.render('index', post);
});
});

这对我来说不起作用,因为我还会从图像、评论和用户集合中获取信息。有异步方法可以做到这一点吗?如果没有,有没有办法重新配置我所拥有的,以便它可以是异步的? (我正在尝试感受异步编程。)

提前致谢!

最佳答案

按原样执行此操作的简单方法是使用 Promise 并执行同步异步操作:

Post.findOne(id).then(post => {
let postId = post.id;
return Promise.all([
Comments.find({postId}),
Images.find({postId}),
// Not sure what query you need here
User.find(),
post,
]);
}).then(data => {
let [comments, images, users, post] = data;
res.render('index', {comments, images, users, post});
});

在您的 index 模板中,您将拥有一个具有四个属性的对象。

您可以在没有 promise 的情况下执行同时异步操作,但我将把它留给其他人来讨论。我更喜欢有 promise 地工作。

<小时/>

Mongoose 还允许您使用其他架构定义作为数据类型,如下所示:

commentSchema = mongoose.Schema({
id: Number,
postId: Post,
userId: User,
dateCreated: {type: Date, default: Date.now},
content: String
});

在这种情况下,您可以使用 .populate在一些查询之后,以便在后台执行另一个查询——例如获取评论的帖子数据。

<小时/>

由于您使用的是 MongoDB(一种 NoSQL 数据库),我会考虑对数据进行非规范化并保持其平坦。 Firebase, which stores data in a similar structure has a great article on how to store and use denormalized data

关于node.js - 在一个 View 上显示不同 Mongoose 表的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426367/

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