Im делает форум api, где форум имеет много потоков, поток имеет много сообщений, и почта может иметь много сообщений.JS - Express - Mongoose выполнить все обещания мангуста перед отправкой ответа
Соотношения делается так:
var PostSchema = new Schema({
text: String,
authorId: String,
slug: Number,
posts: [{ type: Schema.Types.ObjectId, ref: 'Post'}],
created: { type: Date, default: Date.now }
});
Родитель модель имеет список идентификаторов сын модели.
Я сделал мой контроллер, как это:
var util = require('util'),
mongoose = require('mongoose'),
Forum = mongoose.model('Forum'),
Thread = mongoose.model('Thread'),
Post = mongoose.model('Post'),
async = require('async');
exports.show = function(req, res){
var forums;
var getThreads = function(forum) {
return forum.populate('threads', function(err, _forum){
if(err) throw new Error(err);
forum.threads = _forum.threads;
forum.threads.forEach(getPosts);
return callback(err);
});
};
var getPosts = function(thread) {
return thread.populate('posts', function(err, _thread){
if(err) throw new Error(err);
thread.posts = _thread.posts;
thread.posts.forEach(getComments);
return callback(err);
});
};
var getComments = function(post) {
return post.populate('posts', function(err, _post){
if(err) throw new Error(err);
post.posts = _post.posts;
post.posts.forEach(getComments);
return callback(err);
});
};
async.parallel([
function(callback) {
return Forum.find({ ownerId: req.params.owner_id }).exec(function(err, _forums) {
if(err) throw new Error(err);
forums = _forums;
forums.forEach(getThreads);
return callback(err);
});
}
], function(err){
res.json(forums);
}
);
};
Мне нужно сделал полный объект форума, а затем использовать это в ответ, поскольку сообщения имеют сообщение я не могу просто сделать вложенную Заполнить.
Я попытался использовать async lib, но он выполняет функцию обратного вызова перед обещаниями.
Как я могу построить полный объект форума?
Благодарим вас за ответ! Почти работа, я просто не знаю, как получить ответ. res.json (форумы); пусто. –
@ user3117180 Вы отлаживаете правильно? Вы уверены, что не получаете пустой массив в качестве результата запроса базы данных? – danypype
массив из db в порядке, но сдвиг просто удаляет все элементы массива, и в конце концов я не получаю ответа, –