Im은 공개 토론을하고 있으며, 포럼에는 많은 스레드가 있고, 스레드에는 많은 게시물이 있고 게시물에는 게시물이 많이 있습니다.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 }
});
상위 모델은 아들이 모델의 ID의 목록이 있습니다. 게시물 게시물이 있기 때문에 난 그냥 중첩 채우기를 할 수 없어, 나는 그 응답에 이것을 사용, 전체 포럼 개체를 만들 필요가
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);
}
);
};
:
는이 같은 내 컨트롤러를했다.비동기 lib를 사용하려고했지만 약속 전에 콜백 함수를 실행합니다.
전체 포럼 개체는 어떻게 만들 수 있습니까?
답장을 보내 주셔서 감사합니다. 거의 작동합니다. 단지 응답을 얻는 방법을 모르겠습니다. res.json (포럼); 비었다. –
@ user3117180 제대로 디버깅 하시겠습니까? 빈 배열을 데이터베이스 쿼리 결과로 가져 오지 않습니까? – danypype
db의 배열은 괜찮지 만 배열은 배열의 모든 요소를 제거하고 결국에는 응답이 없습니다. –