Я пытаюсь выяснить, как построить мои модели и запросы для моего приложения Я использую экспресс, мангуст и mongodb.
По сути, мое приложение предназначено для мероприятий (вечеринок, турниров, тусовок и т. Д.). У меня есть модель для пользователей и событий. Я пытаюсь сделать так, чтобы пользователь мог быть приглашен на событие. «Пригласить» будет иметь статус «приглашен», «принят», «отклонен». Моя оригинальная идея состояла в том, чтобы иметь это:
let eventSchema = new Schema({
Date:{
type: Date,
required: true
},
Title:{
type: String,
required: true
},
Description:{
type: String,
required: true
},
Owner:{
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
Invites: {
invited : [
{
type: Schema.Types.ObjectId,
ref: 'User'
}
],
accepted: [
{
type: Schema.Types.ObjectId,
ref: 'User'
}
],
declined: [
{
type: Schema.Types.ObjectId,
ref: 'User'
}
]
}
});
Это пользовательская схема:
let userSchema = mongoose.Schema({
firstName:{
type: String,
required: true
},
lastName:{
type: String,
required: true
},
email:{
type: String,
required: true
},
type:{
type: String,
required: true
},
events:{
type: Schema.Types.ObjectId,
ref: 'events',
}
});
Это документ в моей базе данных (в mlab):
{
"_id": {
"$oid": "5b84adca83599470e9d95d90"
},
"Invites": {
"invited": [
{
"$oid": "5b817c2ae7179a43f9ac854e"
},
{
"$oid": "5b817c8ae7179a43f9ac8577"
}
],
"accepted": [],
"declined": []
},
"Title": "Testtttt",
"Date": {
"$date": "2018-08-29T04:00:00.000Z"
},
"Description": "testttttt",
"Owner": {
"$oid": "5b817c2ae7179a43f9ac854e"
},
"__v": 0
}
Я пытаюсь сделать так, чтобы я мог отобразить событие и все его детали. Я сталкиваюсь с проблемами с асинхронностью JS, я верю.
Вот что у меня есть для функции «просмотра» подробностей события:
const displayEventDetails = (req, res, next) => {
let id = req.params.id;
Event.findById(id)
.populate('Owner')
.exec((err, event) => {
var tmpEvent = event.toObject();
var tmpInvitees = [];
var invitees = tmpEvent.Invites.invited;
console.trace(invitees);
invitees.forEach(invitee => {
User.findById(invitee, (err, invitee) => {
tmpInvitees.push(invitee);
});
});
if (err)
console.log("Error Selecting : %s ", err);
if (!event)
return res.render('404');
// console.trace(event);
res.render('event_details',
{
event,
invitees: tmpInvitees
}
);
});
};
У кого-нибудь есть идеи о том, как я могу получить его, чтобы вышеуказанная функция возвращала и событие, и приглашенных? Я считаю, что это рендеринг до того, как метод .forEach может закончиться, и поэтому приглашенные emtpy ...
Любая помощь приветствуется!